-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtrdos.raw.z80s
11849 lines (11833 loc) · 341 KB
/
trdos.raw.z80s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
; z80dasm 1.1.3
; command line: z80dasm --origin=0x0000 --address --labels --source --block-def=trdos.blocks.txt --sym-input=trdos.symbols.input.z80s --sym-output=trdos.symbols.output.z80s --output=trdos.raw.z80s trdos.rom
org 00000h
sys_swap: equ 0x5b00
sys_bankm: equ 0x5b5c
sys_tstack: equ 0x5bff
sys_kstate: equ 0x5c00
sys_kstate.1: equ 0x5c01
sys_repdel: equ 0x5c09
sys_strms: equ 0x5c10
sys_chars: equ 0x5c36
sys_rasp: equ 0x5c38
sys_err_nr: equ 0x5c3a
sys_flags: equ 0x5c3b
sys_tv_flag: equ 0x5c3c
sys_err_sp: equ 0x5c3d
sys_newppc: equ 0x5c42
sys_nsppc: equ 0x5c44
sys_ppc: equ 0x5c45
sys_bordcr: equ 0x5c48
sys_vars: equ 0x5c4b
sys_chans: equ 0x5c4f
sys_curchl: equ 0x5c51
sys_prog: equ 0x5c53
sys_datadd: equ 0x5c57
sys_e_line: equ 0x5c59
sys_k_cur: equ 0x5c5b
sys_ch_add: equ 0x5c5d
sys_worksp: equ 0x5c61
sys_stkbot: equ 0x5c63
sys_stkend: equ 0x5c65
sys_df_sz: equ 0x5c6b
sys_udg: equ 0x5c7b
sys_attr_p: equ 0x5c8d
sys_attr_t: equ 0x5c8f
sys_membot: equ 0x5c92
sys_ramtop: equ 0x5cb2
sys_p_ramt: equ 0x5cb4
sys_p_ramt.high: equ 0x5cb5
trdos_variable.interface_1_zone: equ 0x5cb6
trdos_variable.0xc9: equ 0x5cc2
trdos_variable.unknown_23747: equ 0x5cc3
trdos_variable.drive_a_mode: equ 0x5cc8
trdos_variable.drive_c_mode: equ 0x5cca
trdos_variable.cat_current_sector: equ 0x5ccc
trdos_variable.disk_drive_ready: equ 0x5ccd
trdos_variable.sector_rw_flag: equ 0x5cce
trdos_variable.stack_sp_copy: equ 0x5ccf
trdos_variable.basic_program_autostart: equ 0x5cd1
trdos_variable.basic_program_autostart.high: equ 0x5cd2
trdos_variable.unknown_23763: equ 0x5cd3
trdos_variable.move_command_deleted_files: equ 0x5cd4
trdos_variable.move_command_first_sector: equ 0x5cd5
trdos_variable.bad_sectors_or_move_command_first_track: equ 0x5cd6
trdos_variable.start_file_parameter_or_number_of_tracks: equ 0x5cd7
trdos_variable.start_file_parameter.high: equ 0x5cd8
trdos_variable.ch_add: equ 0x5cd9
trdos_variable.ch_add.high: equ 0x5cda
trdos_variable.stream_or_file_size: equ 0x5cdb
trdos_variable.file_size.high: equ 0x5cdc
trdos_variable.filename: equ 0x5cdd
trdos_variable.filename.2: equ 0x5cdf
trdos_variable.filename.4: equ 0x5ce1
trdos_variable.filename.6: equ 0x5ce3
trdos_variable.file_type: equ 0x5ce5
trdos_variable.file_start: equ 0x5ce6
trdos_variable.file_start.high: equ 0x5ce7
trdos_variable.file_length_in_bytes: equ 0x5ce8
trdos_variable.file_length_in_bytes.high: equ 0x5ce9
trdos_variable.file_length_in_sectors: equ 0x5cea
trdos_variable.file_first_sector: equ 0x5ceb
trdos_variable.c_file_start_or_b_file_size: equ 0x5ced
trdos_variable.file_2_length_in_bytes: equ 0x5cef
trdos_variable.file_2_length_in_sectors: equ 0x5cf1
trdos_variable.file_2_first_sector: equ 0x5cf2
trdos_variable.current_sector: equ 0x5cf4
trdos_variable.current_track: equ 0x5cf5
trdos_variable.current_temporary_drive: equ 0x5cf6
trdos_variable.cleared: equ 0x5cf7
trdos_variable.two_files_drive: equ 0x5cf8
trdos_variable.cat_drive_or_read_verify_flag: equ 0x5cf9
trdos_variable.drive_a_step_rate: equ 0x5cfa
trdos_variable.drive_c_step_rate: equ 0x5cfc
trdos_variable.last_fdc_command: equ 0x5cfe
trdos_variable.sector: equ 0x5cff
trdos_variable.buffer: equ 0x5d00
trdos_variable.hl_copy: equ 0x5d02
trdos_variable.de_copy: equ 0x5d04
trdos_variable.bytes_compared_by_find_command: equ 0x5d06
trdos_variable.deleted_files: equ 0x5d07
trdos_variable.filename_first_char: equ 0x5d08
trdos_variable.data_file_mode: equ 0x5d09
trdos_variable.buffer_flag: equ 0x5d0c
trdos_variable.file_number_for_copying: equ 0x5d0d
trdos_variable.command_mode: equ 0x5d0e
trdos_variable.error_code: equ 0x5d0f
trdos_variable.error_code_msb: equ 0x5d10
trdos_variable.command_line_address: equ 0x5d11
trdos_variable.err_sp_copy: equ 0x5d13
trdos_variable.show_screen_flag: equ 0x5d15
trdos_variable.system_register: equ 0x5d16
trdos_variable.show_title_flag: equ 0x5d17
trdos_variable.interface_1_flag: equ 0x5d18
trdos_variable.default_drive: equ 0x5d19
trdos_variable.internal_address_of_finishing_proc: equ 0x5d1a
trdos_variable.sp_copy: equ 0x5d1c
trdos_variable.find_command_found_file: equ 0x5d1e
trdos_variable.unknown_23839: equ 0x5d1f
trdos_variable.entered_line_3_first_chars: equ 0x5d20
trdos_variable.entered_line_3_first_chars.1: equ 0x5d21
trdos_variable.move_command_blocks: equ 0x5d23
trdos_variable.tmp_buffer_address: equ 0x5d25
trdos_variable.k_channel.output: equ 0x5d26
trdos_variable.r_channel.input.high: equ 0x5d33
trdos_sector_buffer.next_free_sector: equ 0x5e06
trdos_sector_buffer.next_free_track: equ 0x5e07
trdos_sector_buffer.disk_type: equ 0x5e08
trdos_sector_buffer.files: equ 0x5e09
trdos_sector_buffer.free_sectors: equ 0x5e0a
trdos_sector_buffer.sectors_per_track: equ 0x5e0c
trdos_sector_buffer.deleted_files: equ 0x5e19
trdos_sector_buffer.disc_title: equ 0x5e1a
l0000h:
di ;0000 f3 .
l0001h:
ld de,0ffffh ;0001 11 ff ff . . .
l0004h:
ld a,007h ;0004 3e 07 > .
jr l0009h ;0006 18 01 . .
l0008h:
nop ;0008 00 .
l0009h:
out (0feh),a ;0009 d3 fe . .
l000bh:
ld a,03fh ;000b 3e 3f > ?
l000dh:
jr l0013h ;000d 18 04 . .
l000fh:
nop ;000f 00 .
rst_10:
jp print_character_A ;0010 c3 82 3d . . =
l0013h:
ld i,a ;0013 ed 47 . G
l0015h:
jp l001bh ;0015 c3 1b 00 . . .
rst_18:
jp print_message_at_HL ;0018 c3 07 27 . . '
l001bh:
nop ;001b 00 .
nop ;001c 00 .
nop ;001d 00 .
l001eh:
jr l0024h ;001e 18 04 . .
rst_20:
jp call_zx_spectrum_rom_routine_stored_at_the_address_on_tos ;0020 c3 72 2f . r /
ret ;0023 c9 .
l0024h:
ld h,d ;0024 62 b
ld l,e ;0025 6b k
jr l002bh ;0026 18 03 . .
jp l2323h ;0028 c3 23 23 . # #
l002bh:
ld (hl),002h ;002b 36 02 6 .
dec hl ;002d 2b +
cp h ;002e bc .
jr nz,l002bh ;002f 20 fa .
jr l003ah ;0031 18 07 . .
; BLOCK 'not_used_0033' (start 0x0033 end 0x003a)
not_used_0033_start:
defb 0ffh ;0033 ff .
defb 0ffh ;0034 ff .
defb 0ffh ;0035 ff .
defb 0ffh ;0036 ff .
defb 0ffh ;0037 ff .
defb 0fbh ;0038 fb .
defb 0c9h ;0039 c9 .
l003ah:
or a ;003a b7 .
sbc hl,de ;003b ed 52 . R
add hl,de ;003d 19 .
inc hl ;003e 23 #
jr nc,l0047h ;003f 30 06 0 .
dec (hl) ;0041 35 5
jr z,l0047h ;0042 28 03 ( .
dec (hl) ;0044 35 5
jr z,l003ah ;0045 28 f3 ( .
l0047h:
dec hl ;0047 2b +
ld (sys_p_ramt),hl ;0048 22 b4 5c " . \
ld de,l3eafh ;004b 11 af 3e . . >
ld bc,l00a8h ;004e 01 a8 00 . . .
ld a,e ;0051 7b {
ex de,hl ;0052 eb .
ld sp,06000h ;0053 31 00 60 1 . `
ld (05f00h),hl ;0056 22 00 5f " . _
ld hl,l0079h ;0059 21 79 00 ! y .
push hl ;005c e5 .
ld hl,trdos_entry.call_pushed_address ;005d 21 2f 3d ! / =
push hl ;0060 e5 .
ld hl,0b8edh ;0061 21 ed b8 ! . .
l0064h:
jr l0069h ;0064 18 03 . .
jp magic_button_nmi_request ;0066 c3 56 2a . V *
l0069h:
ld (05f10h),hl ;0069 22 10 5f " . _
push af ;006c f5 .
ld a,0c9h ;006d 3e c9 > .
ld (05f12h),a ;006f 32 12 5f 2 . _
pop af ;0072 f1 .
ld hl,(05f00h) ;0073 2a 00 5f * . _
jp 05f10h ;0076 c3 10 5f . . _
l0079h:
ex de,hl ;0079 eb .
inc hl ;007a 23 #
ld (sys_udg),hl ;007b 22 7b 5c " { \
dec hl ;007e 2b +
ld bc,l1e40h ;007f 01 40 1e . @ .
ld (sys_rasp),bc ;0082 ed 43 38 5c . C 8 \
ld (sys_ramtop),hl ;0086 22 b2 5c " . \
ld hl,zx_spectrum_font_char_0 ;0089 21 00 3c ! . <
ld (sys_chars),hl ;008c 22 36 5c " 6 \
ld hl,(sys_ramtop) ;008f 2a b2 5c * . \
ld (hl),03eh ;0092 36 3e 6 >
dec hl ;0094 2b +
ld sp,hl ;0095 f9 .
dec hl ;0096 2b +
dec hl ;0097 2b +
ld (sys_err_sp),hl ;0098 22 3d 5c " = \
ld de,l1303h ;009b 11 03 13 . . .
push de ;009e d5 .
im 1 ;009f ed 56 . V
ld iy,sys_err_nr ;00a1 fd 21 3a 5c . ! : \
ld hl,trdos_variable.interface_1_zone ;00a5 21 b6 5c ! . \
l00a8h:
ld (sys_chans),hl ;00a8 22 4f 5c " O \
ld de,l15afh ;00ab 11 af 15 . . .
ld bc,l0015h ;00ae 01 15 00 . . .
ex de,hl ;00b1 eb .
call sub_0117h ;00b2 cd 17 01 . . .
ex de,hl ;00b5 eb .
dec hl ;00b6 2b +
ld (sys_datadd),hl ;00b7 22 57 5c " W \
inc hl ;00ba 23 #
ld (sys_prog),hl ;00bb 22 53 5c " S \
ld (sys_vars),hl ;00be 22 4b 5c " K \
ld (hl),080h ;00c1 36 80 6 .
inc hl ;00c3 23 #
ld (sys_e_line),hl ;00c4 22 59 5c " Y \
ld (hl),00dh ;00c7 36 0d 6 .
inc hl ;00c9 23 #
ld (hl),080h ;00ca 36 80 6 .
inc hl ;00cc 23 #
ld (sys_worksp),hl ;00cd 22 61 5c " a \
ld (sys_stkbot),hl ;00d0 22 63 5c " c \
ld (sys_stkend),hl ;00d3 22 65 5c " e \
ld a,038h ;00d6 3e 38 > 8
ld (sys_attr_p),a ;00d8 32 8d 5c 2 . \
ld (sys_attr_t),a ;00db 32 8f 5c 2 . \
ld (sys_bordcr),a ;00de 32 48 5c 2 H \
ld hl,l0523h ;00e1 21 23 05 ! # .
ld (sys_repdel),hl ;00e4 22 09 5c " . \
dec (iy-03ah) ;00e7 fd 35 c6 . 5 .
dec (iy-036h) ;00ea fd 35 ca . 5 .
ld hl,015c6h ;00ed 21 c6 15 ! . .
ld de,sys_strms ;00f0 11 10 5c . . \
ld bc,l000dh+1 ;00f3 01 0e 00 . . .
call sub_0117h ;00f6 cd 17 01 . . .
set 1,(iy+001h) ;00f9 fd cb 01 ce . . . .
ld hl,trdos_variable.0xc9 ;00fd 21 c2 5c ! . \
l0100h:
ld (hl),0c9h ;0100 36 c9 6 .
rst 20h ;0102 e7 .
defw 00edfh ;0103 df 0e . .
ld hl,sys_df_sz ;0105 21 6b 5c ! k \
ld (hl),002h ;0108 36 02 6 .
ld hl,l128bh ;010a 21 8b 12 ! . .
push hl ;010d e5 .
ld a,0aah ;010e 3e aa > .
ld (sys_swap),a ;0110 32 00 5b 2 . [
ei ;0113 fb .
jp enter_trdos_from_basic ;0114 c3 31 3d . 1 =
sub_0117h:
ld (05f00h),hl ;0117 22 00 5f " . _
ld hl,trdos_entry.call_pushed_address ;011a 21 2f 3d ! / =
push hl ;011d e5 .
ld hl,0b0edh ;011e 21 ed b0 ! . .
ld (05f10h),hl ;0121 22 10 5f " . _
l0124h:
ld hl,(05f00h) ;0124 2a 00 5f * . _
jp 05f10h ;0127 c3 10 5f . . _
l012ah:
call sub_20e5h ;012a cd e5 20 . .
call cls ;012d cd 97 1d . . .
ld hl,(sys_e_line) ;0130 2a 59 5c * Y \
inc hl ;0133 23 #
ld e,(hl) ;0134 5e ^
inc hl ;0135 23 #
ld d,(hl) ;0136 56 V
ld a,d ;0137 7a z
or e ;0138 b3 .
ex de,hl ;0139 eb .
jr z,l0140h ;013a 28 04 ( .
xor a ;013c af .
ld (trdos_variable.error_code_msb),a ;013d 32 10 5d 2 . ]
l0140h:
push hl ;0140 e5 .
call sub_0232h ;0141 cd 32 02 . 2 .
pop hl ;0144 e1 .
ld (sys_newppc),hl ;0145 22 42 5c " B \
xor a ;0148 af .
ld (sys_nsppc),a ;0149 32 44 5c 2 D \
rst 20h ;014c e7 .
defw 016b0h ;014d b0 16 . .
ld hl,(sys_prog) ;014f 2a 53 5c * S \
dec hl ;0152 2b +
ld (sys_datadd),hl ;0153 22 57 5c " W \
ld sp,(sys_err_sp) ;0156 ed 7b 3d 5c . { = \
ld a,(trdos_variable.error_code_msb) ;015a 3a 10 5d : . ]
or a ;015d b7 .
ld hl,01b76h ;015e 21 76 1b ! v .
jr z,l0166h ;0161 28 03 ( .
rst 20h ;0163 e7 .
defw 01bb0h ;0164 b0 1b . .
l0166h:
push hl ;0166 e5 .
ld hl,trdos_variable.0xc9 ;0167 21 c2 5c ! . \
push hl ;016a e5 .
ret ;016b c9 .
do_interpret_rem_command_in_basic:
call sub_20f1h ;016c cd f1 20 . .
call allocate_the_sector_buffer ;016f cd 4a 29 . J )
ld a,0ffh ;0172 3e ff > .
ld (trdos_variable.show_screen_flag),a ;0174 32 15 5d 2 . ]
xor a ;0177 af .
ld (trdos_variable.cleared),a ;0178 32 f7 5c 2 . \
ld a,0aah ;017b 3e aa > .
ld (trdos_variable.show_title_flag),a ;017d 32 17 5d 2 . ]
ld hl,finishing_proc_0x0201 ;0180 21 01 02 ! . .
ld (trdos_variable.internal_address_of_finishing_proc),hl ;0183 22 1a 5d " . ]
ld hl,l0000h ;0186 21 00 00 ! . .
add hl,sp ;0189 39 9
ld (trdos_variable.sp_copy),hl ;018a 22 1c 5d " . ]
dec hl ;018d 2b +
dec hl ;018e 2b +
ld sp,hl ;018f f9 .
call sub_021dh ;0190 cd 1d 02 . . .
ld hl,(sys_ramtop) ;0193 2a b2 5c * . \
ld de,(sys_ch_add) ;0196 ed 5b 5d 5c . [ ] \
sbc hl,de ;019a ed 52 . R
ex de,hl ;019c eb .
jr nc,l01a5h ;019d 30 06 0 .
or a ;019f b7 .
ld de,l0100h+1 ;01a0 11 01 01 . . .
sbc hl,de ;01a3 ed 52 . R
l01a5h:
ld (sys_ch_add),hl ;01a5 22 5d 5c " ] \
l01a8h:
call sub_01c7h ;01a8 cd c7 01 . . .
l01abh:
jp z,exit_dos ;01ab ca d3 01 . . .
cp 0eah ;01ae fe ea . .
inc hl ;01b0 23 #
jr nz,l01a8h ;01b1 20 f5 .
call sub_01c7h ;01b3 cd c7 01 . . .
jr z,l01abh ;01b6 28 f3 ( .
cp 03ah ;01b8 fe 3a . :
jp nz,exit_dos ;01ba c2 d3 01 . . .
inc hl ;01bd 23 #
call sub_3048h ;01be cd 48 30 . H 0
ld hl,(trdos_variable.command_line_address) ;01c1 2a 11 5d * . ]
jp l030ah ;01c4 c3 0a 03 . . .
sub_01c7h:
ld a,(hl) ;01c7 7e ~
cp 00dh ;01c8 fe 0d . .
ret z ;01ca c8 .
cp 080h ;01cb fe 80 . .
ret z ;01cd c8 .
or a ;01ce b7 .
ret ;01cf c9 .
call sub_1e43h ;01d0 cd 43 1e . C .
exit_dos:
ld hl,l0000h ;01d3 21 00 00 ! . .
ld (trdos_variable.two_files_drive),hl ;01d6 22 f8 5c " . \
call sub_20e5h ;01d9 cd e5 20 . .
call sub_1d63h ;01dc cd 63 1d . c .
ld hl,trdos_variable.show_title_flag ;01df 21 17 5d ! . ]
ld (hl),0aah ;01e2 36 aa 6 .
ld hl,trdos_variable.unknown_23839 ;01e4 21 1f 5d ! . ]
ld a,(hl) ;01e7 7e ~
or a ;01e8 b7 .
ld (hl),000h ;01e9 36 00 6 .
jr nz,l01f3h ;01eb 20 06 .
call remove_fp ;01ed cd 1c 1e . . .
call empty_command_line ;01f0 cd 12 02 . . .
l01f3h:
ld sp,(trdos_variable.sp_copy) ;01f3 ed 7b 1c 5d . { . ]
ld hl,(trdos_variable.internal_address_of_finishing_proc) ;01f7 2a 1a 5d * . ]
ld bc,(trdos_variable.error_code) ;01fa ed 4b 0f 5d . K . ]
ld b,000h ;01fe 06 00 . .
l0200h:
jp (hl) ;0200 e9 .
finishing_proc_0x0201:
call sub_0232h ;0201 cd 32 02 . 2 .
bit 7,(iy+000h) ;0204 fd cb 00 7e . . . ~
ret nz ;0208 c0 .
ld de,trdos_variable.0xc9 ;0209 11 c2 5c . . \
ld sp,(sys_err_sp) ;020c ed 7b 3d 5c . { = \
push de ;0210 d5 .
ret ;0211 c9 .
empty_command_line:
call get_char ;0212 cd 8c 1d . . .
cp 00dh ;0215 fe 0d . .
ret z ;0217 c8 .
call next_char ;0218 cd 2a 1e . * .
jr empty_command_line ;021b 18 f5 . .
sub_021dh:
ld hl,(sys_err_sp) ;021d 2a 3d 5c * = \
ld (trdos_variable.err_sp_copy),hl ;0220 22 13 5d " . ]
ld hl,(trdos_variable.sp_copy) ;0223 2a 1c 5d * . ]
dec hl ;0226 2b +
dec hl ;0227 2b +
ld (sys_err_sp),hl ;0228 22 3d 5c " = \
ld de,l3d16h ;022b 11 16 3d . . =
ld (hl),e ;022e 73 s
inc hl ;022f 23 #
ld (hl),d ;0230 72 r
ret ;0231 c9 .
sub_0232h:
ld hl,(trdos_variable.err_sp_copy) ;0232 2a 13 5d * . ]
ld (sys_err_sp),hl ;0235 22 3d 5c " = \
ret ;0238 c9 .
l0239h:
ld hl,l0000h ;0239 21 00 00 ! . .
ld (trdos_variable.cleared),hl ;023c 22 f7 5c " . \
add hl,sp ;023f 39 9
ld (trdos_variable.sp_copy),hl ;0240 22 1c 5d " . ]
dec hl ;0243 2b +
dec hl ;0244 2b +
ld sp,hl ;0245 f9 .
call sub_021dh ;0246 cd 1d 02 . . .
ld hl,trdos_variable.show_title_flag ;0249 21 17 5d ! . ]
ld a,(hl) ;024c 7e ~
cp 0aah ;024d fe aa . .
ld a,000h ;024f 3e 00 > .
ld (trdos_variable.error_code),a ;0251 32 0f 5d 2 . ]
jp z,finishing_proc_0x02CB ;0254 ca cb 02 . . .
ld (hl),0aah ;0257 36 aa 6 .
call cls ;0259 cd 97 1d . . .
call open_channel_2 ;025c cd 88 1d . . .
ld hl,trdos_title_start ;025f 21 60 03 ! ` .
rst 18h ;0262 df .
call sub_106eh ;0263 cd 6e 10 . n .
ld a,(trdos_variable.interface_1_zone) ;0266 3a b6 5c : . \
cp 0f4h ;0269 fe f4 . .
jr z,l0271h ;026b 28 04 ( .
ld hl,message_interface_1_start ;026d 21 00 10 ! . .
l0270h:
rst 18h ;0270 df .
l0271h:
ld a,(sys_swap) ;0271 3a 00 5b : . [
cp 0aah ;0274 fe aa . .
jr nz,finishing_proc_0x02CB ;0276 20 53 S
call sub_20f1h ;0278 cd f1 20 . .
l027bh:
ld hl,(sys_e_line) ;027b 2a 59 5c * Y \
ld a,0feh ;027e 3e fe > .
l0280h:
ld (trdos_variable.command_mode),a ;0280 32 0e 5d 2 . ]
ld (hl),0f7h ;0283 36 f7 6 .
inc hl ;0285 23 #
ld (hl),022h ;0286 36 22 6 "
inc hl ;0288 23 #
ld (hl),062h ;0289 36 62 6 b
inc hl ;028b 23 #
ld (hl),06fh ;028c 36 6f 6 o
inc hl ;028e 23 #
ld (hl),06fh ;028f 36 6f 6 o
inc hl ;0291 23 #
ld (hl),074h ;0292 36 74 6 t
inc hl ;0294 23 #
ld (hl),022h ;0295 36 22 6 "
inc hl ;0297 23 #
ld (sys_k_cur),hl ;0298 22 5b 5c " [ \
ld (hl),00dh ;029b 36 0d 6 .
inc hl ;029d 23 #
ld (hl),080h ;029e 36 80 6 .
inc hl ;02a0 23 #
ld (sys_worksp),hl ;02a1 22 61 5c " a \
ld (sys_stkbot),hl ;02a4 22 63 5c " c \
ld (sys_stkend),hl ;02a7 22 65 5c " e \
set 3,(iy+001h) ;02aa fd cb 01 de . . . .
jr l02efh ;02ae 18 3f . ?
sub_02b0h:
ld b,003h ;02b0 06 03 . .
l02b2h:
ld a,(hl) ;02b2 7e ~
ld (de),a ;02b3 12 .
inc hl ;02b4 23 #
inc de ;02b5 13 .
djnz l02b2h ;02b6 10 fa . .
ret ;02b8 c9 .
sub_02b9h:
ld b,020h ;02b9 06 20 .
l02bbh:
push bc ;02bb c5 .
xor 008h ;02bc ee 08 . .
out (0ffh),a ;02be d3 ff . .
push af ;02c0 f5 .
ld a,005h ;02c1 3e 05 > .
call sub_3dffh ;02c3 cd ff 3d . . =
pop af ;02c6 f1 .
pop bc ;02c7 c1 .
djnz l02bbh ;02c8 10 f1 . .
ret ;02ca c9 .
finishing_proc_0x02CB:
ld hl,(trdos_variable.sp_copy) ;02cb 2a 1c 5d * . ]
dec hl ;02ce 2b +
dec hl ;02cf 2b +
ld sp,hl ;02d0 f9 .
call sub_20f1h ;02d1 cd f1 20 . .
call open_channel_0 ;02d4 cd 83 1d . . .
ld a,(trdos_variable.system_register) ;02d7 3a 16 5d : . ]
or 003h ;02da f6 03 . .
call sub_02b9h ;02dc cd b9 02 . . .
ld a,(trdos_variable.system_register) ;02df 3a 16 5d : . ]
call sub_02b9h ;02e2 cd b9 02 . . .
xor a ;02e5 af .
ld (trdos_variable.show_screen_flag),a ;02e6 32 15 5d 2 . ]
call sub_2135h ;02e9 cd 35 21 . 5 !
call sub_3032h ;02ec cd 32 30 . 2 0
l02efh:
call cls_lower ;02ef cd 9f 1d . . .
ld hl,finishing_proc_0x02CB ;02f2 21 cb 02 ! . .
ld (trdos_variable.internal_address_of_finishing_proc),hl ;02f5 22 1a 5d " . ]
xor a ;02f8 af .
ld (trdos_variable.error_code),a ;02f9 32 0f 5d 2 . ]
ld hl,(sys_e_line) ;02fc 2a 59 5c * Y \
push hl ;02ff e5 .
ld de,trdos_variable.entered_line_3_first_chars ;0300 11 20 5d . ]
call sub_02b0h ;0303 cd b0 02 . . .
pop hl ;0306 e1 .
ld (trdos_variable.command_line_address),hl ;0307 22 11 5d " . ]
l030ah:
ld a,(hl) ;030a 7e ~
ld b,a ;030b 47 G
and 080h ;030c e6 80 . .
ld a,b ;030e 78 x
jr z,l031ah ;030f 28 09 ( .
cp 0feh ;0311 fe fe . .
jr z,l031ah ;0313 28 05 ( .
push af ;0315 f5 .
call init_default_disk_drive ;0316 cd c8 3d . . =
pop af ;0319 f1 .
l031ah:
ld hl,token_commands_table_start ;031a 21 f3 2f ! . /
dec hl ;031d 2b +
ld c,000h ;031e 0e 00 . .
l0320h:
inc c ;0320 0c .
ld d,a ;0321 57 W
ld a,015h ;0322 3e 15 > .
cp c ;0324 b9 .
jp c,exit_dos ;0325 da d3 01 . . .
ld a,d ;0328 7a z
inc hl ;0329 23 #
cp (hl) ;032a be .
jr nz,l0320h ;032b 20 f3 .
cp 0feh ;032d fe fe . .
call nz,allocate_the_sector_buffer ;032f c4 4a 29 . J )
ld a,009h ;0332 3e 09 > .
ld (trdos_variable.bytes_compared_by_find_command),a ;0334 32 06 5d 2 . ]
xor a ;0337 af .
ld (trdos_variable.error_code),a ;0338 32 0f 5d 2 . ]
ld (trdos_variable.bad_sectors_or_move_command_first_track),a ;033b 32 d6 5c 2 . \
ld (trdos_variable.error_code_msb),a ;033e 32 10 5d 2 . ]
ld hl,sys_flags ;0341 21 3b 5c ! ; \
res 7,(hl) ;0344 cb be . .
ld b,000h ;0346 06 00 . .
ld hl,token_commands_addresses_table_start ;0348 21 08 30 ! . 0
dec c ;034b 0d .
sla c ;034c cb 21 . !
add hl,bc ;034e 09 .
ld e,(hl) ;034f 5e ^
inc hl ;0350 23 #
ld d,(hl) ;0351 56 V
ex de,hl ;0352 eb .
push hl ;0353 e5 .
ld de,l0359h ;0354 11 59 03 . Y .
push de ;0357 d5 .
jp (hl) ;0358 e9 .
l0359h:
ld hl,sys_flags ;0359 21 3b 5c ! ; \
set 7,(hl) ;035c cb fe . .
pop hl ;035e e1 .
jp (hl) ;035f e9 .
; BLOCK 'trdos_title' (start 0x0360 end 0x03ac)
trdos_title_start:
defb 016h ;0360 16 .
defb 001h ;0361 01 .
defb 005h ;0362 05 .
defb 02ah ;0363 2a *
defb 020h ;0364 20
defb 054h ;0365 54 T
defb 052h ;0366 52 R
defb 02dh ;0367 2d -
defb 044h ;0368 44 D
defb 04fh ;0369 4f O
defb 053h ;036a 53 S
defb 020h ;036b 20
defb 056h ;036c 56 V
defb 065h ;036d 65 e
defb 072h ;036e 72 r
defb 020h ;036f 20
defb 035h ;0370 35 5
defb 02eh ;0371 2e .
defb 030h ;0372 30 0
defb 033h ;0373 33 3
defb 020h ;0374 20
defb 02ah ;0375 2a *
defb 00dh ;0376 0d .
defb 00dh ;0377 0d .
defb 07fh ;0378 7f
defb 020h ;0379 20
defb 031h ;037a 31 1
defb 039h ;037b 39 9
defb 038h ;037c 38 8
defb 036h ;037d 36 6
defb 020h ;037e 20
defb 054h ;037f 54 T
defb 065h ;0380 65 e
defb 063h ;0381 63 c
defb 068h ;0382 68 h
defb 06eh ;0383 6e n
defb 06fh ;0384 6f o
defb 06ch ;0385 6c l
defb 06fh ;0386 6f o
defb 067h ;0387 67 g
defb 079h ;0388 79 y
defb 020h ;0389 20
defb 052h ;038a 52 R
defb 065h ;038b 65 e
defb 073h ;038c 73 s
defb 065h ;038d 65 e
defb 061h ;038e 61 a
defb 072h ;038f 72 r
defb 063h ;0390 63 c
defb 068h ;0391 68 h
defb 020h ;0392 20
defb 04ch ;0393 4c L
defb 074h ;0394 74 t
defb 064h ;0395 64 d
defb 02eh ;0396 2e .
defb 016h ;0397 16 .
defb 005h ;0398 05 .
defb 00bh ;0399 0b .
defb 028h ;039a 28 (
defb 055h ;039b 55 U
defb 02eh ;039c 2e .
defb 04bh ;039d 4b K
defb 02eh ;039e 2e .
defb 029h ;039f 29 )
defb 016h ;03a0 16 .
defb 007h ;03a1 07 .
defb 005h ;03a2 05 .
defb 042h ;03a3 42 B
defb 045h ;03a4 45 E
defb 054h ;03a5 54 T
defb 041h ;03a6 41 A
defb 020h ;03a7 20
defb 031h ;03a8 31 1
defb 032h ;03a9 32 2
defb 038h ;03aa 38 8
defb 000h ;03ab 00 .
l03ach:
call read_sector_8_of_track_0 ;03ac cd fd 03 . . .
call print_carriage_return ;03af cd 80 3d . . =
call print_carriage_return ;03b2 cd 80 3d . . =
l03b5h:
ld bc,(trdos_sector_buffer.free_sectors) ;03b5 ed 4b 0a 5e . K . ^
call print_number_in_BC ;03b9 cd a9 1d . . .
ld hl,message.cr.free ;03bc 21 d2 29 ! . )
rst 18h ;03bf df .
jp_exit_dos:
jp exit_dos ;03c0 c3 d3 01 . . .
print_error_number_A_whose_message_is_at_HL:
push af ;03c3 f5 .
ld a,(trdos_variable.command_mode) ;03c4 3a 0e 5d : . ]
cp 0feh ;03c7 fe fe . .
jr nz,l03cdh ;03c9 20 02 .
pop af ;03cb f1 .
ret ;03cc c9 .
l03cdh:
pop af ;03cd f1 .
ld (trdos_variable.error_code),a ;03ce 32 0f 5d 2 . ]
ld a,(trdos_variable.show_screen_flag) ;03d1 3a 15 5d : . ]
or a ;03d4 b7 .
call z,print_message_at_HL ;03d5 cc 07 27 . . '
ret ;03d8 c9 .
print_no_files_error_and_exit_DOS:
ld hl,message.cr.no_files ;03d9 21 28 2a ! ( *
ld a,001h ;03dc 3e 01 > .
jp print_error_number_A_whose_message_is_at_HL_and_exit_DOS ;03de c3 4a 1c . J .
print_OK_and_exit_DOS:
ld hl,message.ok ;03e1 21 66 27 ! f '
xor a ;03e4 af .
jp print_error_number_A_whose_message_is_at_HL_and_exit_DOS ;03e5 c3 4a 1c . J .
read_cat_sector_0_into_tmp_buffer:
xor a ;03e8 af .
ld (trdos_variable.cat_current_sector),a ;03e9 32 cc 5c 2 . \
read_current_cat_sector_into_tmp_buffer:
ld de,(trdos_variable.cat_current_sector) ;03ec ed 5b cc 5c . [ . \
ld d,000h ;03f0 16 00 . .
read_sector_DE_into_tmp_buffer:
call allocate_the_sector_buffer ;03f2 cd 4a 29 . J )
ld hl,trdos_variable.tmp_buffer_address ;03f5 21 25 5d ! % ]
ld b,001h ;03f8 06 01 . .
jp read_sectors ;03fa c3 3d 1e . = .
read_sector_8_of_track_0:
call allocate_the_sector_buffer ;03fd cd 4a 29 . J )
ld de,l0008h ;0400 11 08 00 . . .
jr read_sector_DE_into_tmp_buffer ;0403 18 ed . .
read_system_track:
call read_sector_8_of_track_0 ;0405 cd fd 03 . . .
ld a,(trdos_sector_buffer.sectors_per_track) ;0408 3a 0c 5e : . ^
cp 010h ;040b fe 10 . .
jr z,sectors_per_track_are_correct_so_disk_is_recognized ;040d 28 06 ( .
ld hl,message.cr.disc_error ;040f 21 e2 29 ! . )
rst 18h ;0412 df .
jr jp_exit_dos ;0413 18 ab . .
sectors_per_track_are_correct_so_disk_is_recognized:
call sub_3e11h ;0415 cd 11 3e . . >
res 0,(hl) ;0418 cb 86 . .
res 1,(hl) ;041a cb 8e . .
ld a,(trdos_sector_buffer.disk_type) ;041c 3a 08 5e : . ^
bit 0,a ;041f cb 47 . G
jr nz,l0425h ;0421 20 02 .
set 0,(hl) ;0423 cb c6 . .
l0425h:
bit 3,a ;0425 cb 5f . _
ret nz ;0427 c0 .
set 1,(hl) ;0428 cb ce . .
ret ;042a c9 .
z_if_next_command_line_char_is_carriage_return:
ld hl,(trdos_variable.command_line_address) ;042b 2a 11 5d * . ]
inc hl ;042e 23 #
ld a,(hl) ;042f 7e ~
cp 00dh ;0430 fe 0d . .
ret ;0432 c9 .
cli_command.cat:
call z_if_next_command_line_char_is_carriage_return ;0433 cd 2b 04 . + .
ld bc,l0001h+1 ;0436 01 02 00 . . .
ld (trdos_variable.stream_or_file_size),bc ;0439 ed 43 db 5c . C . \
jr z,print_catalogue_of_current_temporary_drive ;043d 28 2b ( +
cp 023h ;043f fe 23 . #
jr nz,l045dh ;0441 20 1a .
ld (sys_ch_add),hl ;0443 22 5d 5c " ] \
call sub_1e0bh ;0446 cd 0b 1e . . .
call get_char ;0449 cd 8c 1d . . .
cp 00dh ;044c fe 0d . .
jr z,print_catalogue_of_current_temporary_drive ;044e 28 1a ( .
cp 02ch ;0450 fe 2c . ,
jp nz,error.wrong_drive_letter ;0452 c2 1a 1d . . .
call next_char ;0455 cd 2a 1e . * .
call expt_exp ;0458 cd bd 1d . . .
jr l0460h ;045b 18 03 . .
l045dh:
call parse_expression ;045d cd df 1d . . .
l0460h:
call pop_hl_if_checking_syntax ;0460 cd 75 1d . u .
call stk_fetch ;0463 cd b5 1d . . .
ex de,hl ;0466 eb .
call parse_possible_drive_letter_in_filename_at_HL ;0467 cd 81 1c . . .
print_catalogue_of_current_temporary_drive:
call pop_hl_if_checking_syntax ;046a cd 75 1d . u .
ld a,(trdos_variable.current_temporary_drive) ;046d 3a f6 5c : . \
ld (trdos_variable.cat_drive_or_read_verify_flag),a ;0470 32 f9 5c 2 . \
call read_system_track ;0473 cd 05 04 . . .
ld a,(trdos_variable.stream_or_file_size) ;0476 3a db 5c : . \
print_catalogue_to_stream_A:
cp 002h ;0479 fe 02 . .
push af ;047b f5 .
call z,cls ;047c cc 97 1d . . .
pop af ;047f f1 .
cp 011h ;0480 fe 11 . .
jp nc,error.wrong_drive_letter ;0482 d2 1a 1d . . .
call chan_open ;0485 cd 84 1d . . .
ld a,0ffh ;0488 3e ff > .
ld (trdos_variable.two_files_drive),a ;048a 32 f8 5c 2 . \
ld hl,message.cr.title ;048d 21 f7 29 ! . )
rst 18h ;0490 df .
ld hl,trdos_sector_buffer.disc_title ;0491 21 1a 5e ! . ^
rst 18h ;0494 df .
call print_carriage_return ;0495 cd 80 3d . . =
ld a,(trdos_sector_buffer.files) ;0498 3a 09 5e : . ^
ld hl,trdos_sector_buffer.deleted_files ;049b 21 19 5e ! . ^
sub (hl) ;049e 96 .
push hl ;049f e5 .
call print_number_in_A ;04a0 cd a3 1d . . .
ld hl,message.files.cr ;04a3 21 2b 2a ! + *
rst 18h ;04a6 df .
pop hl ;04a7 e1 .
ld c,(hl) ;04a8 4e N
call print_number_in_C ;04a9 cd a4 1d . . .
ld hl,message.del_file ;04ac 21 1d 2a ! . *
rst 18h ;04af df .
call read_cat_sector_0_into_tmp_buffer ;04b0 cd e8 03 . . .
ld hl,trdos_variable.tmp_buffer_address ;04b3 21 25 5d ! % ]
print_catalogue.line:
call init_cat_drive ;04b6 cd f6 04 . . .
call print_carriage_return ;04b9 cd 80 3d . . =
ld a,(trdos_variable.current_temporary_drive) ;04bc 3a f6 5c : . \
add a,041h ;04bf c6 41 . A
rst 10h ;04c1 d7 .
ld b,002h ;04c2 06 02 . .
print_catalogue.file:
call init_cat_drive ;04c4 cd f6 04 . . .
push bc ;04c7 c5 .
ld a,03ah ;04c8 3e 3a > :
rst 10h ;04ca d7 .
push hl ;04cb e5 .
call print_filename_at_HL ;04cc cd 38 29 . 8 )
ld bc,l000dh ;04cf 01 0d 00 . . .
pop hl ;04d2 e1 .
push hl ;04d3 e5 .
add hl,bc ;04d4 09 .
ld c,(hl) ;04d5 4e N
push bc ;04d6 c5 .
ld a,c ;04d7 79 y
ld b,002h ;04d8 06 02 . .
cp 00ah ;04da fe 0a . .
jr c,l04dfh ;04dc 38 01 8 .
dec b ;04de 05 .
l04dfh:
cp 064h ;04df fe 64 . d
jr nc,l04e8h ;04e1 30 05 0 .
l04e3h:
ld a,020h ;04e3 3e 20 >
rst 10h ;04e5 d7 .
djnz l04e3h ;04e6 10 fb . .
l04e8h:
pop bc ;04e8 c1 .
call print_number_in_BC ;04e9 cd a9 1d . . .
pop hl ;04ec e1 .
pop bc ;04ed c1 .
ld de,rst_10 ;04ee 11 10 00 . . .
add hl,de ;04f1 19 .
djnz print_catalogue.file ;04f2 10 d0 . .
jr print_catalogue.line ;04f4 18 c0 . .
init_cat_drive:
push hl ;04f6 e5 .
push bc ;04f7 c5 .
ld a,(trdos_variable.cat_drive_or_read_verify_flag) ;04f8 3a f9 5c : . \
ld hl,trdos_variable.current_temporary_drive ;04fb 21 f6 5c ! . \
cp (hl) ;04fe be .
call nz,init_disk_drive_in_A_register ;04ff c4 cb 3d . . =
pop bc ;0502 c1 .
pop hl ;0503 e1 .
jp l2fc6h ;0504 c3 c6 2f . . /
sub_0507h:
ld de,rst_10 ;0507 11 10 00 . . .
add hl,de ;050a 19 .
ret ;050b c9 .
sub_050ch:
push hl ;050c e5 .
push bc ;050d c5 .
ld bc,0a1dbh ;050e 01 db a1 . . .
add hl,bc ;0511 09 .
jr c,l0517h ;0512 38 03 8 .
pop bc ;0514 c1 .
pop hl ;0515 e1 .
ret ;0516 c9 .
l0517h:
ld hl,trdos_variable.cat_current_sector ;0517 21 cc 5c ! . \
inc (hl) ;051a 34 4
call read_current_cat_sector_into_tmp_buffer ;051b cd ec 03 . . .
pop bc ;051e c1 .
pop hl ;051f e1 .
ld hl,trdos_variable.tmp_buffer_address ;0520 21 25 5d ! % ]
l0523h:
ret ;0523 c9 .
check_drive_letter_and_convert_to_number:
and 0dfh ;0524 e6 df . .
sbc a,041h ;0526 de 41 . A
jp c,error.wrong_drive_letter ;0528 da 1a 1d . . .
cp 004h ;052b fe 04 . .
jp nc,error.wrong_drive_letter ;052d d2 1a 1d . . .
ret ;0530 c9 .
fetch_drive_letter_from_the_calculator_stack:
call stk_fetch ;0531 cd b5 1d . . .
ld a,c ;0534 79 y
cp b ;0535 b8 .
jp z,error.wrong_drive_letter ;0536 ca 1a 1d . . .
ret ;0539 c9 .
cli_command.new:
call sub_1dcdh ;053a cd cd 1d . . .
call pop_hl_if_checking_syntax ;053d cd 75 1d . u .
call sub_102eh ;0540 cd 2e 10 . . .
call sub_1cb0h ;0543 cd b0 1c . . .
ld a,(trdos_variable.current_temporary_drive) ;0546 3a f6 5c : . \
ld (trdos_variable.two_files_drive),a ;0549 32 f8 5c 2 . \
jp nz,print_no_files_error_and_exit_DOS ;054c c2 d9 03 . . .
push bc ;054f c5 .
call read_file_descriptor_C ;0550 cd 5d 16 . ] .
call sub_1cb0h ;0553 cd b0 1c . . .
push af ;0556 f5 .
ld a,(trdos_variable.two_files_drive) ;0557 3a f8 5c : . \
ld hl,trdos_variable.current_temporary_drive ;055a 21 f6 5c ! . \
cp (hl) ;055d be .
jp nz,error.wrong_drive_letter ;055e c2 1a 1d . . .
call read_system_track ;0561 cd 05 04 . . .
pop af ;0564 f1 .
jp z,error.file_exists ;0565 ca 50 1c . P .
pop bc ;0568 c1 .
l0569h:
call write_file_descriptor_C ;0569 cd 6b 16 . k .
call sub_1e43h ;056c cd 43 1e . C .
jp print_OK_and_exit_DOS ;056f c3 e1 03 . . .
check_error_code_msb:
ld a,(trdos_variable.error_code_msb) ;0572 3a 10 5d : . ]
or a ;0575 b7 .
ret ;0576 c9 .
check_deleted_files_and_exit_DOS:
ld a,(trdos_variable.deleted_files) ;0577 3a 07 5d : . ]
or a ;057a b7 .
jp z,print_no_files_error_and_exit_DOS ;057b ca d9 03 . . .
jp print_OK_and_exit_DOS ;057e c3 e1 03 . . .
sub_0581h:
push bc ;0581 c5 .
call cls ;0582 cd 97 1d . . .
ld a,(trdos_variable.current_temporary_drive) ;0585 3a f6 5c : . \
add a,041h ;0588 c6 41 . A
call print_character_A ;058a cd 82 3d . . =
ld a,03ah ;058d 3e 3a > :
call print_character_A ;058f cd 82 3d . . =
ld hl,trdos_variable.filename ;0592 21 dd 5c ! . \
call print_filename_at_HL ;0595 cd 38 29 . 8 )
ld hl,message.file_exists ;0598 21 20 28 ! (
call print_message_at_HL ;059b cd 07 27 . . '
call get_uppercase_pressed_key ;059e cd 52 10 . R .
cp 059h ;05a1 fe 59 . Y
push af ;05a3 f5 .
call cls ;05a4 cd 97 1d . . .
pop af ;05a7 f1 .
pop bc ;05a8 c1 .
ret nz ;05a9 c0 .
push bc ;05aa c5 .
call cls ;05ab cd 97 1d . . .
pop bc ;05ae c1 .
call sub_0781h ;05af cd 81 07 . . .
xor a ;05b2 af .
ret ;05b3 c9 .
sub_05b4h:
ld a,(trdos_variable.file_type) ;05b4 3a e5 5c : . \
cp 023h ;05b7 fe 23 . #
jr z,l05bdh ;05b9 28 02 ( .
xor a ;05bb af .
ret ;05bc c9 .
l05bdh:
ld a,00ah ;05bd 3e 0a > .
ld (trdos_variable.bytes_compared_by_find_command),a ;05bf 32 06 5d 2 . ]
call sub_1cb3h ;05c2 cd b3 1c . . .
ld a,009h ;05c5 3e 09 > .
ld (trdos_variable.bytes_compared_by_find_command),a ;05c7 32 06 5d 2 . ]
ret ;05ca c9 .
l05cbh:
ld a,(trdos_variable.filename) ;05cb 3a dd 5c : . \
cp 02ah ;05ce fe 2a . *
jp nz,print_no_files_error_and_exit_DOS ;05d0 c2 d9 03 . . .
call stk_fetch ;05d3 cd b5 1d . . .
ex de,hl ;05d6 eb .
call parse_possible_drive_letter_in_filename_at_HL ;05d7 cd 81 1c . . .
ld a,(hl) ;05da 7e ~
cp 02ah ;05db fe 2a . *
jp nz,error.wrong_drive_letter ;05dd c2 1a 1d . . .
ld a,(trdos_variable.current_temporary_drive) ;05e0 3a f6 5c : . \
ld (trdos_variable.cat_drive_or_read_verify_flag),a ;05e3 32 f9 5c 2 . \
ld a,(trdos_variable.cat_drive_or_read_verify_flag) ;05e6 3a f9 5c : . \
call init_disk_drive_in_A_register ;05e9 cd cb 3d . . =
call read_system_track ;05ec cd 05 04 . . .
ld a,0ffh ;05ef 3e ff > .
ld (trdos_variable.file_number_for_copying),a ;05f1 32 0d 5d 2 . ]
l05f4h:
ld a,(trdos_variable.two_files_drive) ;05f4 3a f8 5c : . \
call init_disk_drive_in_A_register ;05f7 cd cb 3d . . =
call read_system_track ;05fa cd 05 04 . . .
ld a,(trdos_variable.file_number_for_copying) ;05fd 3a 0d 5d : . ]
inc a ;0600 3c <
ld (trdos_variable.file_number_for_copying),a ;0601 32 0d 5d 2 . ]
ld c,a ;0604 4f O
call read_file_descriptor_C ;0605 cd 5d 16 . ] .
ld a,(trdos_variable.filename) ;0608 3a dd 5c : . \
cp 000h ;060b fe 00 . .
jp z,print_OK_and_exit_DOS ;060d ca e1 03 . . .
cp 001h ;0610 fe 01 . .
jr z,l05f4h ;0612 28 e0 ( .
ld hl,trdos_variable.file_start ;0614 21 e6 5c ! . \