diff --git a/Softcard3/Readme.md b/Softcard3/Readme.md new file mode 100644 index 0000000..d6366ba --- /dev/null +++ b/Softcard3/Readme.md @@ -0,0 +1,37 @@ +# Softcard /// Interpreter + +This is a SOS Interpreter to allow launching of the Softcard /// CPM from a hard disk (ie no floppy needed). + +The approach that this uses is to load a virtual floppy driver into a spare bank of memory and then use a small routine in non banked memory to call this. The jump to the Block IO routine in the original code is then redirected to this new one. The floppy blocks requested are mapped to the actual block on the the sos harddisk for the image file. The Softcard CPM includes its own floppy driver and this is also redirected to the virtual driver only for drive A. Drive B requests will still go to the external disk drive. + +It requires a disk image of the Softcard /// CPM boot disk in po format to be loaded onto the sos hard disk named 'CPMIMAGE.PO' + +During the booting/loading process, the driver looks for certain blocks being read and patches these as they are read to redirect to the 'new' floppy driver. That way you can just reload the cpm boot disk image and then it gets patched automatically. (this will not work if the disk contains a newer CPM, I'll update when one surfaces) + +I used a disassembly of the CPM boot disk to understand the inner workings better and determine what needed to be patched. I have include the latest for this in the disassembly folder. + +# Softcard /// CPM1 hard disk driver + +The Softcard came with a driver for use with the Profile hard disk. The Utils disk included a program to create a sos file on the Profile that can then be used as a harddisk from CPM's view. This is similiar in operation to the virtual floppy driver, it maps the CPM block requests to the actual blocks of the CPM1 file. I added this file layer on top of my Problock driver so that this can be used on any prodos block mode card. + +The driver uses the device names as the filenames on the sos disk with the '.' removed. + +# Ready to use images + +I have included in the disks folder a soshdboot harddisk image with this all preloaded and added to the Selector menu. This can be booted with either the new rom or the boot floppy from soshdboot: https://github.com/robjustice/soshdboot + +This image has both a CPM1(this is from the apple3rtr image) and CPM2(empty) disk file on it, and the drivers loaded onto the CPMIMAGE.PO. These are configured in CPM as C and D drives. + +## Build the Interpreter: +``` +ca65 softcard.s -l softcard.lst +ca65 virtualdisk.s -l virtualdisk.lst +ld65 softcard.o virtualdisk.o -o SOFTCARD.INTERP#0c0000 -C apple3.cfg +``` + +## Build the cpm1 driver: +``` +ca65.exe cpm1.s -l cpm1.lst +ld65.exe cpm1.o -o cpm1.o65 -C Apple3_o65.cfg +python A3Driverutil.py update cpm1.o65 SOS.DRIVER#0c0000 +``` diff --git a/Softcard3/disassembly/1900-1fff.bin.dis65 b/Softcard3/disassembly/1900-1fff.bin.dis65 new file mode 100644 index 0000000..98487fe --- /dev/null +++ b/Softcard3/disassembly/1900-1fff.bin.dis65 @@ -0,0 +1,304 @@ +### 6502bench SourceGen dis65 v1.0 ### +{ +"_ContentVersion":4, +"FileDataLength":1792, +"FileDataCrc32":-52007121, +"ProjectProps":{ +"CpuName":"6502", +"IncludeUndocumentedInstr":false, +"TwoByteBrk":true, +"EntryFlags":32702671, +"AutoLabelStyle":"Simple", +"AnalysisParams":{ +"AnalyzeUncategorizedData":true, +"DefaultTextScanMode":"LowHighAscii", +"MinCharsForString":4, +"SeekNearbyTargets":true, +"UseRelocData":false, +"SmartPlpHandling":false, +"SmartPlbHandling":true}, + +"PlatformSymbolFileIdentifiers":["RT:Apple/A3-ROM.sym65", +"RT:Apple/A3-IO.sym65", +"RT:Apple/SOS.sym65"], +"ExtensionScriptFileIdentifiers":["RT:Apple/SOS.cs"], +"ProjectSyms":{ +}}, + +"AddressMap":[{ +"Offset":0, +"Addr":6400}], +"TypeHints":[{ +"Low":0, +"High":0, +"Hint":"Data"}, + +{ +"Low":16, +"High":16, +"Hint":"Code"}, + +{ +"Low":19, +"High":19, +"Hint":"Code"}, + +{ +"Low":22, +"High":22, +"Hint":"Code"}, + +{ +"Low":25, +"High":25, +"Hint":"Code"}, + +{ +"Low":28, +"High":28, +"Hint":"Code"}, + +{ +"Low":31, +"High":31, +"Hint":"Code"}, + +{ +"Low":34, +"High":34, +"Hint":"Code"}, + +{ +"Low":40, +"High":40, +"Hint":"Code"}, + +{ +"Low":43, +"High":43, +"Hint":"Code"}, + +{ +"Low":46, +"High":46, +"Hint":"Code"}, + +{ +"Low":128, +"High":128, +"Hint":"Code"}, + +{ +"Low":131, +"High":131, +"Hint":"Code"}, + +{ +"Low":134, +"High":134, +"Hint":"Code"}, + +{ +"Low":137, +"High":137, +"Hint":"Code"}, + +{ +"Low":185, +"High":185, +"Hint":"Code"}, + +{ +"Low":194, +"High":194, +"Hint":"Code"}, + +{ +"Low":203, +"High":203, +"Hint":"Code"}, + +{ +"Low":212, +"High":212, +"Hint":"Code"}, + +{ +"Low":221, +"High":221, +"Hint":"Code"}, + +{ +"Low":518, +"High":518, +"Hint":"Code"}, + +{ +"Low":639, +"High":639, +"Hint":"Code"}, + +{ +"Low":733, +"High":733, +"Hint":"Code"}, + +{ +"Low":883, +"High":883, +"Hint":"Code"}, + +{ +"Low":1149, +"High":1149, +"Hint":"Code"}], +"StatusFlagOverrides":{ +}, + +"Comments":{ +"16":"KEYBOARD NMI VECTOR", +"19":"ALLOCATE A SIR", +"22":"DEALLOCATE A SIR", +"25":"DISABLE NMI", +"28":"ENABLE NMI", +"31":"QUEUE AN EVENT", +"34":"SELECT I/O EXPANSION ROM", +"37":"SYSTEM DEATH", +"40":"SOS ERROR", +"43":"REQUEST BUFFER", +"46":"GET BUFFER\u0027S ADDRESS", +"49":"RELEASE BUFFER", +"179":"disk driver", +"240":"save 6502 state", +"258":"zero page back to 0", +"263":"set bank for z80", +"272":"enable Cxxx I/O", +"277":"enable z80 fffx decoding switch", +"279":"updated with slot during init?", +"282":"10111110 - 1M,no IO,vid,nmi,wr prot,prim,primrom,norom", +"290":"disable 6502 interrupts", +"291":"switch to Z80", +"294":"come back to here when its 6502\u0027s turn", +"297":"branch if we have an Apple /// IRQ", +"299":"interrupt or z80 should clear this???", +"304":"back to $18 zero page", +"319":"restore 6502 state", +"333":"go service the I/O", +"336":"done, go back and switch to z80", +"339":"disable supervision timer???", +"342":" to allow 6502 interrupt handler to finish", +"345":"enable 6502 interrupts, pending one will fire", +"956":"SET INTERRUPT ZERO PAGE", +"973":"ANY INTERRUPT ON ACIA?", +"981":"ANY INTERRUPT ON E-6522?", +"984":" No", +"993":"CHECK FLAG BITS", +"1002":"ANY INTERRUPT ON D-6522?", +"1010":"ANY SLOT INTERRUPT?", +"1013":" YES"}, + +"LongComments":{ +"-2147483647":{ +"Text":"6502bench SourceGen v1.7.2-dev1", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"240":{ +"Text":"\r\nHandover to Z80 routine\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"0":{ +"Text":"Recreated SOS globals\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"16":{ +"Text":"Dummy SOS Jump Table\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"339":{ +"Text":"interrupt handler?\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"883":{ +"Text":"6502 interrupt handler\r\n\r\nlooks copied from sos\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}}, + +"Notes":{ +}, + +"UserLabels":{ +}, + +"OperandFormats":{ +"8":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"9":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"10":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"11":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"13":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"14":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"15":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}}, + +"LvTables":{ +}, + +"Visualizations":[], +"VisualizationAnimations":[], +"VisualizationSets":{ +}, + +"RelocList":{ +}, + +"DbrValues":{ +}} diff --git a/Softcard3/disassembly/1900-1fff.bin.txt b/Softcard3/disassembly/1900-1fff.bin.txt new file mode 100644 index 0000000..082064c --- /dev/null +++ b/Softcard3/disassembly/1900-1fff.bin.txt @@ -0,0 +1,720 @@ + ; 6502bench SourceGen v1.7.2-dev1 + KBD .eq $c000 ;last key pressed (KA Data) + SPKRIII .eq $c040 ;RW beeps speaker (Apple /// type) + JOYRDY .eq $c066 ;Read PDLOT (A/D Ramp Stop) + PHASOFF .eq $c080 + ACIASTAT .eq $c0f1 ;ACIA STATUS REGISTER + PRENIB16 .eq $f2c4 + POSTNIB16 .eq $f30f + Z_REG .eq $ffd0 ;zero page register + D_IFR .eq $ffdd + D_IER .eq $ffde + E_REG .eq $ffdf ;environment register + E_IFR .eq $ffed + E_IER .eq $ffee + B_REG .eq $ffef ;bank switch register + + .org $1900 + ; Recreated SOS globals ++000000 1900: 08 .dd1 $08 ++000001 1901: 02 L1901 .dd1 $02 ++000002 1902: 00 .dd1 $00 ++000003 1903: 00 .dd1 $00 ++000004 1904: 00 .dd1 $00 ++000005 1905: 00 .dd1 $00 ++000006 1906: 00 L1906 .dd1 $00 ++000007 1907: 80 .dd1 $80 ++000008 1908: 00 L1908 .dd1 $00 ++000009 1909: 00 .dd1 $00 ++00000a 190a: 00 .dd1 $00 ++00000b 190b: 00 .dd1 $00 ++00000c 190c: 00 .dd1 $00 ++00000d 190d: 00 .dd1 $00 ++00000e 190e: 00 .dd1 $00 ++00000f 190f: 00 .dd1 $00 + + ; Dummy SOS Jump Table ++000010 1910: 4c 31 19 jmp L1931 ;KEYBOARD NMI VECTOR + ++000013 1913: 4c 05 1e jmp L1E05 ;ALLOCATE A SIR + ++000016 1916: 4c 5e 1e jmp L1E5E ;DEALLOCATE A SIR + ++000019 1919: 4c 31 19 jmp L1931 ;DISABLE NMI + ++00001c 191c: 4c 31 19 jmp L1931 ;ENABLE NMI + ++00001f 191f: 4c d1 1e jmp L1ED1 ;QUEUE AN EVENT + ++000022 1922: 4c b8 1e jmp L1EB8 ;SELECT I/O EXPANSION ROM + ++000025 1925: 4c 69 1a L1925 jmp L1A69 ;SYSTEM DEATH + ++000028 1928: 4c 5e 1a jmp L1A5E ;SOS ERROR + ++00002b 192b: 4c 31 19 jmp L1931 ;REQUEST BUFFER + ++00002e 192e: 4c 31 19 jmp L1931 ;GET BUFFER'S ADDRESS + ++000031 1931: a9 20 L1931 lda #$20 ;RELEASE BUFFER ++000033 1933: d0 f0 bne L1925 + ++000035 1935: 00 00 00 00+ .fill 75,$00 + ++000080 1980: 4c f0 19 jmp L19F0 + ++000083 1983: 4c 9e 1a jmp L1A9E + ++000086 1986: 4c 21 1b jmp L1B21 + ++000089 1989: 4c b0 19 jmp L19B0 + ++00008c 198c: 00 00 00 00+ .fill 36,$00 + ++0000b0 19b0: 20 e9 19 L19B0 jsr L19E9 ++0000b3 19b3: 20 c5 9c jsr $9cc5 ;disk driver ++0000b6 19b6: 4c e3 19 jmp L19E3 + ++0000b9 19b9: 20 e3 19 jsr L19E3 ++0000bc 19bc: 20 c4 f2 jsr PRENIB16 ++0000bf 19bf: 4c e9 19 jmp L19E9 + ++0000c2 19c2: 20 e3 19 jsr L19E3 ++0000c5 19c5: 20 0f f3 jsr POSTNIB16 ++0000c8 19c8: 4c e9 19 jmp L19E9 + ++0000cb 19cb: 20 e9 19 jsr L19E9 ++0000ce 19ce: 20 f5 9a jsr $9af5 ++0000d1 19d1: 4c e3 19 jmp L19E3 + ++0000d4 19d4: 20 e9 19 jsr L19E9 ++0000d7 19d7: 20 00 9a jsr $9a00 ++0000da 19da: 4c e3 19 jmp L19E3 + ++0000dd 19dd: 20 e9 19 jsr L19E9 ++0000e0 19e0: 20 bc 9b jsr $9bbc ++0000e3 19e3: a0 01 L19E3 ldy #$01 ++0000e5 19e5: 8c ef ff sty B_REG ++0000e8 19e8: 60 rts + ++0000e9 19e9: ac 01 19 L19E9 ldy L1901 ++0000ec 19ec: 8c ef ff sty B_REG ++0000ef 19ef: 60 rts + + ; + ; Handover to Z80 routine + ; ++0000f0 19f0: 8d 98 16 L19F0 sta $1698 ;save 6502 state ++0000f3 19f3: 8e 99 16 stx $1699 ++0000f6 19f6: 8c 9a 16 sty $169a ++0000f9 19f9: 08 php ++0000fa 19fa: 68 pla ++0000fb 19fb: 8d 9b 16 sta $169b ++0000fe 19fe: ba tsx ++0000ff 19ff: 8e 9c 16 stx $169c ++000102 1a02: a9 00 L1A02 lda #$00 ;zero page back to 0 ++000104 1a04: 8d d0 ff sta Z_REG ++000107 1a07: ad 94 16 lda $1694 ;set bank for z80 ++00010a 1a0a: 8d ef ff sta B_REG ++00010d 1a0d: ad df ff lda E_REG ++000110 1a10: 09 c4 ora #$c4 ;enable Cxxx I/O ++000112 1a12: 8d df ff sta E_REG ++000115 1a15: a2 10 ldx #$10 ;enable z80 fffx decoding switch ++000117 1a17: 8e 80 c0 stx PHASOFF ;updated with slot during init? ++00011a 1a1a: 29 be and #$be ;10111110 - 1M,no IO,vid,nmi,wr prot,prim,primrom,norom ++00011c 1a1c: 8d df ff sta E_REG ++00011f 1a1f: 8d 92 16 sta $1692 ++000122 1a22: 78 sei ;disable 6502 interrupts ++000123 1a23: ad fc ff lda $fffc ;switch to Z80 ++000126 1a26: ad ef ff L1A26 lda B_REG ;come back to here when its 6502's turn ++000129 1a29: 10 28 bpl L1A53 ;branch if we have an Apple /// IRQ ++00012b 1a2b: ad 92 16 lda $1692 ;interrupt or z80 should clear this??? ++00012e 1a2e: d0 f6 bne L1A26 ++000130 1a30: a9 18 L1A30 lda #$18 ;back to $18 zero page ++000132 1a32: 8d d0 ff sta Z_REG ++000135 1a35: ad df ff lda E_REG ++000138 1a38: 09 40 ora #$40 ++00013a 1a3a: 29 7f and #$7f ++00013c 1a3c: 8d df ff sta E_REG ++00013f 1a3f: ad 9b 16 lda $169b ;restore 6502 state ++000142 1a42: 48 pha ++000143 1a43: ad 98 16 lda $1698 ++000146 1a46: ae 99 16 ldx $1699 ++000149 1a49: ac 9a 16 ldy $169a ++00014c 1a4c: 28 plp ++00014d 1a4d: 20 8f 16 jsr $168f ;go service the I/O ++000150 1a50: 4c f0 19 jmp L19F0 ;done, go back and switch to z80 + + ; interrupt handler? ++000153 1a53: ad fd ff L1A53 lda $fffd ;disable supervision timer??? ++000156 1a56: ad 92 16 lda $1692 ; to allow 6502 interrupt handler to finish ++000159 1a59: 58 cli ;enable 6502 interrupts, pending one will fire ++00015a 1a5a: d0 a6 bne L1A02 ++00015c 1a5c: f0 d2 beq L1A30 + ++00015e 1a5e: 8d 08 19 L1A5E sta L1908 ++000161 1a61: 68 pla ++000162 1a62: 68 pla ++000163 1a63: ad 08 19 lda L1908 ++000166 1a66: c9 01 cmp #$01 ++000168 1a68: 60 rts + ++000169 1a69: 8d 08 19 L1A69 sta L1908 ++00016c 1a6c: a0 77 ldy #$77 ++00016e 1a6e: 8c df ff sty E_REG ++000171 1a71: 2c 40 c0 bit SPKRIII ++000174 1a74: 48 pha ++000175 1a75: 4a lsr A ++000176 1a76: 4a lsr A ++000177 1a77: 4a lsr A ++000178 1a78: 4a lsr A ++000179 1a79: a0 00 ldy #$00 ++00017b 1a7b: 20 8f 1a jsr L1A8F ++00017e 1a7e: 68 pla ++00017f 1a7f: 20 8f 1a jsr L1A8F ++000182 1a82: a9 53 lda #$53 ++000184 1a84: 8d ba 05 sta $05ba ++000187 1a87: a9 44 lda #$44 ++000189 1a89: 8d bb 05 sta $05bb ++00018c 1a8c: 4c 8c 1a L1A8C jmp L1A8C + ++00018f 1a8f: 29 0f L1A8F and #$0f ++000191 1a91: 09 30 ora #$30 ++000193 1a93: c9 3a cmp #$3a ++000195 1a95: 90 02 bcc L1A99 ++000197 1a97: 69 06 adc #$06 ++000199 1a99: 99 bc 05 L1A99 sta $05bc,y ++00019c 1a9c: c8 iny ++00019d 1a9d: 60 rts + ++00019e 1a9e: a9 77 L1A9E lda #$77 ++0001a0 1aa0: 8d df ff sta E_REG ++0001a3 1aa3: a9 01 lda #$01 ++0001a5 1aa5: 8d 00 c0 sta KBD ++0001a8 1aa8: 4c f0 19 jmp L19F0 + ++0001ab 1aab: 00 00 00 00+ L1AAB .fill 14,$00 ++0001b9 1ab9: 00 00 00 00+ L1AB9 .fill 15,$00 ++0001c8 1ac8: 00 00 00 00+ L1AC8 .fill 15,$00 ++0001d7 1ad7: 00 00 00 00+ L1AD7 .fill 15,$00 ++0001e6 1ae6: 00 00 00 00+ L1AE6 .fill 16,$00 ++0001f6 1af6: 80 80 80 80+ L1AF6 .fill 16,$80 + ++000206 1b06: 20 82 1b jsr L1B82 ++000209 1b09: ad a1 16 L1B09 lda $16a1 ++00020c 1b0c: aa tax ++00020d 1b0d: 0a asl A ++00020e 1b0e: 0a asl A ++00020f 1b0f: 85 ba sta $ba ++000211 1b11: ad 4d fe lda $fe4d ++000214 1b14: 2a rol A ++000215 1b15: 2a rol A ++000216 1b16: 6a L1B16 ror A ++000217 1b17: 6a ror A ++000218 1b18: ca dex ++000219 1b19: 10 fb bpl L1B16 ++00021b 1b1b: 20 d3 1b jsr L1BD3 ++00021e 1b1e: 4c 24 1b jmp L1B24 + ++000221 1b21: ac a1 16 L1B21 ldy $16a1 ++000224 1b24: ae a0 16 L1B24 ldx $16a0 ++000227 1b27: 86 c0 L1B27 stx $c0 ++000229 1b29: a9 00 lda #$00 ++00022b 1b2b: 8d 08 19 sta L1908 ++00022e 1b2e: b9 f6 1a lda L1AF6,y ++000231 1b31: 18 clc ++000232 1b32: 30 33 bmi L1B67 ++000234 1b34: 85 c1 sta $c1 ++000236 1b36: a2 05 ldx #$05 ++000238 1b38: bd a2 16 L1B38 lda $16a2,x ++00023b 1b3b: 95 c2 sta $c2,x ++00023d 1b3d: ca dex ++00023e 1b3e: 10 f8 bpl L1B38 ++000240 1b40: ad ef ff lda B_REG ++000243 1b43: 48 pha ++000244 1b44: 20 68 1b jsr L1B68 ++000247 1b47: ad df ff lda E_REG ++00024a 1b4a: 29 bf and #$bf ++00024c 1b4c: 8d df ff sta E_REG ++00024f 1b4f: a2 01 ldx #$01 ++000251 1b51: b5 c3 L1B51 lda $c3,x ++000253 1b53: 9d a3 16 sta $16a3,x ++000256 1b56: b5 c8 lda $c8,x ++000258 1b58: 9d a8 16 sta $16a8,x ++00025b 1b5b: ca dex ++00025c 1b5c: 10 f3 bpl L1B51 ++00025e 1b5e: 68 pla ++00025f 1b5f: 8d ef ff sta B_REG ++000262 1b62: ad 08 19 lda L1908 ++000265 1b65: c9 01 cmp #$01 ++000267 1b67: 60 L1B67 rts + ++000268 1b68: b9 e6 1a L1B68 lda L1AE6,y ++00026b 1b6b: 8d ef ff sta B_REG ++00026e 1b6e: b9 d7 1a lda L1AD7,y ++000271 1b71: 48 pha ++000272 1b72: b9 c8 1a lda L1AC8,y ++000275 1b75: 48 pha ++000276 1b76: ad df ff lda E_REG ++000279 1b79: 09 40 ora #$40 ++00027b 1b7b: 8d df ff sta E_REG ++00027e 1b7e: 60 rts + ++00027f 1b7f: 20 09 1b jsr L1B09 ++000282 1b82: ad 03 20 L1B82 lda $2003 ++000285 1b85: cd 4d fe cmp $fe4d ++000288 1b88: f0 48 beq L1BD2 ++00028a 1b8a: 85 b9 sta $b9 ++00028c 1b8c: ac 4d fe ldy $fe4d ++00028f 1b8f: 84 b8 sty $b8 ++000291 1b91: 8d 4d fe sta $fe4d ++000294 1b94: a9 00 lda #$00 ++000296 1b96: 85 ba L1B96 sta $ba ++000298 1b98: a5 b9 lda $b9 ++00029a 1b9a: 20 d3 1b jsr L1BD3 ++00029d 1b9d: 84 bb sty $bb ++00029f 1b9f: a5 b8 lda $b8 ++0002a1 1ba1: 20 d3 1b jsr L1BD3 ++0002a4 1ba4: c4 bb cpy $bb ++0002a6 1ba6: f0 19 beq L1BC1 ++0002a8 1ba8: aa tax ++0002a9 1ba9: de c8 16 dec $16c8,x ++0002ac 1bac: 10 05 bpl L1BB3 ++0002ae 1bae: a2 07 ldx #$07 ++0002b0 1bb0: 20 27 1b jsr L1B27 ++0002b3 1bb3: a5 bb L1BB3 lda $bb ++0002b5 1bb5: aa tax ++0002b6 1bb6: fe c8 16 inc $16c8,x ++0002b9 1bb9: d0 06 bne L1BC1 ++0002bb 1bbb: a8 tay ++0002bc 1bbc: a2 06 ldx #$06 ++0002be 1bbe: 20 27 1b jsr L1B27 ++0002c1 1bc1: 46 b9 L1BC1 lsr $b9 ++0002c3 1bc3: 46 b9 lsr $b9 ++0002c5 1bc5: 46 b8 lsr $b8 ++0002c7 1bc7: 46 b8 lsr $b8 ++0002c9 1bc9: a5 ba lda $ba ++0002cb 1bcb: 18 clc ++0002cc 1bcc: 69 04 adc #$04 ++0002ce 1bce: c9 10 cmp #$10 ++0002d0 1bd0: d0 c4 bne L1B96 ++0002d2 1bd2: 60 L1BD2 rts + ++0002d3 1bd3: 29 03 L1BD3 and #$03 ++0002d5 1bd5: 05 ba ora $ba ++0002d7 1bd7: a8 tay ++0002d8 1bd8: b9 b0 16 lda $16b0,y ++0002db 1bdb: a8 tay ++0002dc 1bdc: 60 rts + ++0002dd 1bdd: e0 14 cpx #$14 ++0002df 1bdf: b0 0a bcs L1BEB ++0002e1 1be1: bc b0 16 ldy $16b0,x ++0002e4 1be4: 30 07 bmi L1BED ++0002e6 1be6: b9 f6 1a lda L1AF6,y ++0002e9 1be9: 10 06 bpl L1BF1 ++0002eb 1beb: a0 00 L1BEB ldy #$00 ++0002ed 1bed: 8c e0 16 L1BED sty $16e0 ++0002f0 1bf0: 60 rts + ++0002f1 1bf1: b9 aa 1a L1BF1 lda L1AAB-1,y ++0002f4 1bf4: 85 d0 sta $d0 ++0002f6 1bf6: b9 b9 1a lda L1AB9,y ++0002f9 1bf9: 85 d1 sta $d1 ++0002fb 1bfb: b9 e6 1a lda L1AE6,y ++0002fe 1bfe: 8d ef ff sta B_REG ++000301 1c01: a0 1b ldy #$1b ++000303 1c03: b1 d0 L1C03 lda ($d0),y ++000305 1c05: 99 e0 16 sta $16e0,y ++000308 1c08: 88 dey ++000309 1c09: 10 f8 bpl L1C03 ++00030b 1c0b: 60 rts + ++00030c 1c0c: f8 L1C0C .dd1 $f8 ++00030d 1c0d: 00 L1C0D .dd1 $00 ++00030e 1c0e: 00 00 00 00+ L1C0E .fill 10,$00 ++000318 1c18: 80 .dd1 $80 ++000319 1c19: 00 00 00 00+ .fill 13,$00 ++000326 1c26: 00 00 00 00+ L1C26 .fill 24,$00 ++00033e 1c3e: 00 00 00 00+ L1C3E .fill 24,$00 ++000356 1c56: 00 00 00 00+ L1C56 .fill 24,$00 ++00036e 1c6e: 00 L1C6E .dd1 $00 ++00036f 1c6f: 00 L1C6F .dd1 $00 ++000370 1c70: 00 L1C70 .dd1 $00 ++000371 1c71: 00 L1C71 .dd1 $00 ++000372 1c72: 00 L1C72 .dd1 $00 + + ; 6502 interrupt handler + ; + ; looks copied from sos + ; ++000373 1c73: 48 pha ++000374 1c74: 8a txa ++000375 1c75: 48 pha ++000376 1c76: 98 tya ++000377 1c77: 48 pha ++000378 1c78: ba tsx ++000379 1c79: e0 fa cpx #$fa ++00037b 1c7b: 90 05 bcc L1C82 ++00037d 1c7d: a9 06 lda #$06 ++00037f 1c7f: 20 69 1a jsr L1A69 ++000382 1c82: bc 04 01 L1C82 ldy $0104,x ++000385 1c85: d8 cld ++000386 1c86: ad df ff lda E_REG ++000389 1c89: aa tax ++00038a 1c8a: 29 30 and #$30 ++00038c 1c8c: 09 44 ora #$44 ++00038e 1c8e: 8d df ff sta E_REG ++000391 1c91: 8a txa ++000392 1c92: 48 pha ++000393 1c93: ad d0 ff lda Z_REG ++000396 1c96: 48 pha ++000397 1c97: ad ef ff lda B_REG ++00039a 1c9a: 48 pha ++00039b 1c9b: ad 0d 1c lda L1C0D ++00039e 1c9e: 48 pha ++00039f 1c9f: 2c ff cf bit $cfff ++0003a2 1ca2: 2c 20 c0 bit $c020 ++0003a5 1ca5: a9 00 lda #$00 ++0003a7 1ca7: 8d 0d 1c sta L1C0D ++0003aa 1caa: 98 tya ++0003ab 1cab: 29 10 L1CAB and #$10 ++0003ad 1cad: f0 05 beq L1CB4 ++0003af 1caf: a9 01 lda #$01 ++0003b1 1cb1: 20 69 1a jsr L1A69 ++0003b4 1cb4: 2c ef ff L1CB4 bit B_REG ++0003b7 1cb7: 10 03 bpl L1CBC ++0003b9 1cb9: 4c 8e 1d jmp L1D8E + ++0003bc 1cbc: a9 00 L1CBC lda #$00 ;SET INTERRUPT ZERO PAGE ++0003be 1cbe: 8d d0 ff sta Z_REG ++0003c1 1cc1: ad df ff lda E_REG ++0003c4 1cc4: 09 80 ora #$80 ++0003c6 1cc6: 8d df ff sta E_REG ++0003c9 1cc9: 29 7f and #$7f ++0003cb 1ccb: a2 01 ldx #$01 ++0003cd 1ccd: ac f1 c0 ldy ACIASTAT ;ANY INTERRUPT ON ACIA? ++0003d0 1cd0: 8d df ff sta E_REG ++0003d3 1cd3: 30 59 bmi L1D2E ++0003d5 1cd5: ad ed ff lda E_IFR ;ANY INTERRUPT ON E-6522? ++0003d8 1cd8: 10 10 bpl L1CEA ; No ++0003da 1cda: 2d ee ff and E_IER ++0003dd 1cdd: a0 07 ldy #$07 ++0003df 1cdf: a2 02 ldx #$02 ++0003e1 1ce1: 4a L1CE1 lsr A ;CHECK FLAG BITS ++0003e2 1ce2: b0 4a bcs L1D2E ++0003e4 1ce4: e8 inx ++0003e5 1ce5: 88 dey ++0003e6 1ce6: d0 f9 bne L1CE1 ++0003e8 1ce8: f0 18 beq L1D02 + ++0003ea 1cea: ad dd ff L1CEA lda D_IFR ;ANY INTERRUPT ON D-6522? ++0003ed 1ced: 10 13 bpl L1D02 ++0003ef 1cef: 2d de ff and D_IER ++0003f2 1cf2: 2c 73 1d bit L1D72+1 ;ANY SLOT INTERRUPT? ++0003f5 1cf5: d0 0f bne L1D06 ; YES ++0003f7 1cf7: a0 07 ldy #$07 ++0003f9 1cf9: a2 09 ldx #$09 ++0003fb 1cfb: 4a L1CFB lsr A ++0003fc 1cfc: b0 30 bcs L1D2E ++0003fe 1cfe: e8 inx ++0003ff 1cff: 88 dey ++000400 1d00: d0 f9 bne L1CFB ++000402 1d02: a2 10 L1D02 ldx #$10 ++000404 1d04: d0 1e bne L1D24 + ++000406 1d06: a2 11 L1D06 ldx #$11 ++000408 1d08: 2c 65 c0 bit JOYRDY-1 ++00040b 1d0b: 10 21 bpl L1D2E ++00040d 1d0d: e8 inx ++00040e 1d0e: 2c 64 c0 bit $c064 ++000411 1d11: 10 1b bpl L1D2E ++000413 1d13: ad ef ff lda B_REG ++000416 1d16: e8 inx ++000417 1d17: 2c a5 1d bit L1DA4+1 ++00041a 1d1a: f0 12 beq L1D2E ++00041c 1d1c: e8 inx ++00041d 1d1d: 2c ac 1c bit L1CAB+1 ++000420 1d20: f0 0c beq L1D2E ++000422 1d22: a2 0a ldx #$0a ++000424 1d24: a9 02 L1D24 lda #$02 ++000426 1d26: 20 69 1a jsr L1A69 ++000429 1d29: a9 03 L1D29 lda #$03 ++00042b 1d2b: 20 69 1a jsr L1A69 ++00042e 1d2e: bd 0e 1c L1D2E lda L1C0E,x ++000431 1d31: 10 f1 bpl L1D24 ++000433 1d33: e0 02 cpx #$02 ++000435 1d35: d0 03 bne L1D3A ++000437 1d37: 8e 95 16 stx $1695 ++00043a 1d3a: bd 26 1c L1D3A lda L1C26,x ++00043d 1d3d: 85 fd sta $fd ++00043f 1d3f: 1d 3e 1c ora L1C3E,x ++000442 1d42: f0 e0 beq L1D24 ++000444 1d44: bd 3e 1c lda L1C3E,x ++000447 1d47: 85 fe sta $fe ++000449 1d49: bd 56 1c lda L1C56,x ++00044c 1d4c: 8d ef ff sta B_REG ++00044f 1d4f: ad 0c 1c lda L1C0C ++000452 1d52: c9 48 cmp #$48 ++000454 1d54: 90 d3 bcc L1D29 ++000456 1d56: e9 20 sbc #$20 ++000458 1d58: 8d 0c 1c sta L1C0C ++00045b 1d5b: 85 ff sta $ff ++00045d 1d5d: aa tax ++00045e 1d5e: 20 7a 1d jsr L1D7A ++000461 1d61: 78 sei ++000462 1d62: a9 00 lda #$00 ++000464 1d64: 8d d0 ff sta Z_REG ++000467 1d67: 18 clc ++000468 1d68: ad 0c 1c lda L1C0C ++00046b 1d6b: 69 20 adc #$20 ++00046d 1d6d: 8d 0c 1c sta L1C0C ++000470 1d70: 85 ff sta $ff ++000472 1d72: a9 02 L1D72 lda #$02 ++000474 1d74: 8d dd ff sta D_IFR ++000477 1d77: 4c 8e 1d jmp L1D8E + ++00047a 1d7a: 6c fd 00 L1D7A jmp ($00fd) + ++00047d 1d7d: 48 pha ++00047e 1d7e: ad 92 16 lda $1692 ++000481 1d81: d0 02 bne L1D85 ++000483 1d83: 68 pla ++000484 1d84: 40 rti + ++000485 1d85: 68 L1D85 pla ++000486 1d86: ad fd ff lda $fffd ++000489 1d89: a9 21 lda #$21 ++00048b 1d8b: 20 69 1a jsr L1A69 ++00048e 1d8e: 78 L1D8E sei ++00048f 1d8f: ad df ff lda E_REG ++000492 1d92: 09 40 ora #$40 ++000494 1d94: 8d df ff sta E_REG ++000497 1d97: 68 pla ++000498 1d98: 20 b8 1e jsr L1EB8 ++00049b 1d9b: 68 pla ++00049c 1d9c: 8d ef ff sta B_REG ++00049f 1d9f: 68 pla ++0004a0 1da0: 8d d0 ff sta Z_REG ++0004a3 1da3: 68 pla ++0004a4 1da4: 09 20 L1DA4 ora #$20 ++0004a6 1da6: 2c 06 19 bit L1906 ++0004a9 1da9: 30 02 bmi L1DAD ++0004ab 1dab: 29 df and #$df ++0004ad 1dad: 8d df ff L1DAD sta E_REG ++0004b0 1db0: ae 6e 1c L1DB0 ldx L1C6E ++0004b3 1db3: f0 2b beq L1DE0 ++0004b5 1db5: ad df ff lda E_REG ++0004b8 1db8: 48 pha ++0004b9 1db9: ad d0 ff lda Z_REG ++0004bc 1dbc: 48 pha ++0004bd 1dbd: ad ef ff lda B_REG ++0004c0 1dc0: 48 pha ++0004c1 1dc1: 8a txa ++0004c2 1dc2: 48 pha ++0004c3 1dc3: 20 e6 1d jsr L1DE6 ++0004c6 1dc6: 78 sei ++0004c7 1dc7: 68 pla ++0004c8 1dc8: 68 pla ++0004c9 1dc9: 8d ef ff sta B_REG ++0004cc 1dcc: 68 pla ++0004cd 1dcd: 8d d0 ff sta Z_REG ++0004d0 1dd0: 68 pla ++0004d1 1dd1: 09 20 ora #$20 ++0004d3 1dd3: 2c 06 19 bit L1906 ++0004d6 1dd6: 30 02 bmi L1DDA ++0004d8 1dd8: 29 df and #$df ++0004da 1dda: 8d df ff L1DDA sta E_REG ++0004dd 1ddd: 4c b0 1d jmp L1DB0 + ++0004e0 1de0: 68 L1DE0 pla ++0004e1 1de1: a8 tay ++0004e2 1de2: 68 pla ++0004e3 1de3: aa tax ++0004e4 1de4: 68 pla ++0004e5 1de5: 40 rti + ++0004e6 1de6: a2 00 L1DE6 ldx #$00 ++0004e8 1de8: 8e 6e 1c stx L1C6E ++0004eb 1deb: ad 72 1c lda L1C72 ++0004ee 1dee: 8d ef ff sta B_REG ++0004f1 1df1: ad 71 1c lda L1C71 ++0004f4 1df4: 48 pha ++0004f5 1df5: ad 70 1c lda L1C70 ++0004f8 1df8: 48 pha ++0004f9 1df9: ac 6f 1c ldy L1C6F ++0004fc 1dfc: 08 php ++0004fd 1dfd: 68 pla ++0004fe 1dfe: 29 82 and #$82 ++000500 1e00: 48 pha ++000501 1e01: 98 tya ++000502 1e02: 40 rti + ++000503 1e03: 81 L1E03 .dd1 $81 ++000504 1e04: 00 L1E04 .dd1 $00 + ++000505 1e05: 08 L1E05 php ++000506 1e06: 20 99 1e jsr L1E99 ++000509 1e09: 48 pha ++00050a 1e0a: 8a txa ++00050b 1e0b: 48 pha ++00050c 1e0c: b1 f9 L1E0C lda ($f9),y ++00050e 1e0e: c9 18 cmp #$18 ++000510 1e10: aa tax ++000511 1e11: b0 33 bcs L1E46 ++000513 1e13: bd 0e 1c lda L1C0E,x ++000516 1e16: 30 2e bmi L1E46 ++000518 1e18: ad 03 1e lda L1E03 ++00051b 1e1b: 9d 0e 1c sta L1C0E,x ++00051e 1e1e: c8 iny ++00051f 1e1f: 91 f9 sta ($f9),y ++000521 1e21: c8 iny ++000522 1e22: b1 f9 lda ($f9),y ++000524 1e24: 9d 26 1c sta L1C26,x ++000527 1e27: c8 iny ++000528 1e28: b1 f9 lda ($f9),y ++00052a 1e2a: 9d 3e 1c sta L1C3E,x ++00052d 1e2d: c8 iny ++00052e 1e2e: b1 f9 lda ($f9),y ++000530 1e30: 9d 56 1c sta L1C56,x ++000533 1e33: c8 iny ++000534 1e34: cc 04 1e cpy L1E04 ++000537 1e37: 90 d3 bcc L1E0C ++000539 1e39: 18 clc ++00053a 1e3a: ee 03 1e inc L1E03 ++00053d 1e3d: 30 0f bmi L1E4E ++00053f 1e3f: a9 81 lda #$81 ++000541 1e41: 8d 03 1e sta L1E03 ++000544 1e44: 30 08 bmi L1E4E + ++000546 1e46: 8a L1E46 txa ++000547 1e47: 48 pha ++000548 1e48: 20 84 1e jsr L1E84 ++00054b 1e4b: 68 pla ++00054c 1e4c: aa tax ++00054d 1e4d: 38 L1E4D sec ++00054e 1e4e: 68 L1E4E pla ++00054f 1e4f: 8d df ff sta E_REG ++000552 1e52: 68 pla ++000553 1e53: 8d d0 ff sta Z_REG ++000556 1e56: b0 03 bcs L1E5B ++000558 1e58: 28 plp ++000559 1e59: 18 clc ++00055a 1e5a: 60 rts + ++00055b 1e5b: 28 L1E5B plp ++00055c 1e5c: 38 sec ++00055d 1e5d: 60 rts + ++00055e 1e5e: 08 L1E5E php ++00055f 1e5f: 20 99 1e jsr L1E99 ++000562 1e62: 48 pha ++000563 1e63: 8a txa ++000564 1e64: 48 pha ++000565 1e65: b1 f9 L1E65 lda ($f9),y ++000567 1e67: aa tax ++000568 1e68: e0 18 cpx #$18 ++00056a 1e6a: b0 e1 bcs L1E4D ++00056c 1e6c: c8 iny ++00056d 1e6d: bd 0e 1c lda L1C0E,x ++000570 1e70: 10 db bpl L1E4D ++000572 1e72: d1 f9 cmp ($f9),y ++000574 1e74: d0 d7 bne L1E4D ++000576 1e76: c8 iny ++000577 1e77: c8 iny ++000578 1e78: c8 iny ++000579 1e79: c8 iny ++00057a 1e7a: cc 04 1e cpy L1E04 ++00057d 1e7d: 90 e6 bcc L1E65 ++00057f 1e7f: 20 84 1e jsr L1E84 ++000582 1e82: 90 c9 bcc L1E4D ++000584 1e84: ac 04 1e L1E84 ldy L1E04 ++000587 1e87: 38 L1E87 sec ++000588 1e88: 98 tya ++000589 1e89: e9 05 sbc #$05 ++00058b 1e8b: a8 tay ++00058c 1e8c: 90 0a bcc L1E98 ++00058e 1e8e: b1 f9 lda ($f9),y ++000590 1e90: aa tax ++000591 1e91: a9 00 lda #$00 ++000593 1e93: 9d 0e 1c sta L1C0E,x ++000596 1e96: f0 ef beq L1E87 + ++000598 1e98: 60 L1E98 rts + ++000599 1e99: 78 L1E99 sei ++00059a 1e9a: 8d 04 1e sta L1E04 ++00059d 1e9d: ad d0 ff lda Z_REG ++0005a0 1ea0: 48 pha ++0005a1 1ea1: a9 00 lda #$00 ++0005a3 1ea3: 8d d0 ff sta Z_REG ++0005a6 1ea6: 86 f9 stx $f9 ++0005a8 1ea8: 84 fa sty $fa ++0005aa 1eaa: a8 tay ++0005ab 1eab: ad df ff lda E_REG ++0005ae 1eae: aa tax ++0005af 1eaf: 09 04 ora #$04 ++0005b1 1eb1: 29 f7 and #$f7 ++0005b3 1eb3: 8d df ff sta E_REG ++0005b6 1eb6: 68 pla ++0005b7 1eb7: 60 rts + ++0005b8 1eb8: c9 05 L1EB8 cmp #$05 ++0005ba 1eba: b0 14 bcs L1ED0 ++0005bc 1ebc: 08 php ++0005bd 1ebd: 78 sei ++0005be 1ebe: 8d 0d 1c sta L1C0D ++0005c1 1ec1: 09 c0 ora #$c0 ++0005c3 1ec3: 8d ce 1e sta L1ECC+2 ++0005c6 1ec6: 2c ff cf bit $cfff ++0005c9 1ec9: 2c 20 c0 bit $c020 ++0005cc 1ecc: 2c 00 c0 L1ECC bit KBD ++0005cf 1ecf: 28 plp ++0005d0 1ed0: 60 L1ED0 rts + ++0005d1 1ed1: 08 L1ED1 php ++0005d2 1ed2: 78 sei ++0005d3 1ed3: ad 6e 1c lda L1C6E ++0005d6 1ed6: d0 10 bne L1EE8 ++0005d8 1ed8: 86 fb stx $fb ++0005da 1eda: 84 fc sty $fc ++0005dc 1edc: a0 05 ldy #$05 ++0005de 1ede: b1 fb L1EDE lda ($fb),y ++0005e0 1ee0: 99 6e 1c sta L1C6E,y ++0005e3 1ee3: 88 dey ++0005e4 1ee4: 10 f8 bpl L1EDE ++0005e6 1ee6: 28 plp ++0005e7 1ee7: 60 rts + ++0005e8 1ee8: a9 05 L1EE8 lda #$05 ++0005ea 1eea: 20 69 1a jsr L1A69 ++0005ed 1eed: 40 rti + ++0005ee 1eee: 00 .dd1 $00 ++0005ef 1eef: 05 .dd1 $05 ++0005f0 1ef0: 1f .dd1 $1f ++0005f1 1ef1: 00 00 00 00+ .fill 9,$00 ++0005fa 1efa: 01 .dd1 $01 ++0005fb 1efb: 00 .dd1 $00 ++0005fc 1efc: bb .dd1 $bb ++0005fd 1efd: 02 .dd1 $02 ++0005fe 1efe: e5 .dd1 $e5 ++0005ff 1eff: d5 .dd1 $d5 ++000600 1f00: 08 .dd1 $08 ++000601 1f01: 2e 43 4f 4e+ .str “.CONSOLE” ++000609 1f09: 00 00 00 00+ .fill 7,$00 ++000610 1f10: 08 .dd1 $08 ++000611 1f11: 2e 50 52 49+ .str “.PRINTER” ++000619 1f19: 00 00 00 00+ .fill 7,$00 ++000620 1f20: 0a 2e 53 49+ .str $0a,“.SILENTYPE” ++00062b 1f2b: 00 00 00 00+ .fill 133,$00 ++0006b0 1fb0: 80 80 80 80+ .fill 16,$80 ++0006c0 1fc0: 81 81 81 81+ .fill 16,$81 ++0006d0 1fd0: 82 82 82 82+ .fill 16,$82 ++0006e0 1fe0: 83 83 83 83+ .fill 16,$83 ++0006f0 1ff0: 00 .dd1 $00 ++0006f1 1ff1: 01 01 01 01+ .fill 11,$01 ++0006fc 1ffc: 02 .dd1 $02 ++0006fd 1ffd: 03 .dd1 $03 ++0006fe 1ffe: 02 .dd1 $02 ++0006ff 1fff: 03 .dd1 $03 diff --git a/Softcard3/disassembly/disk3_driver.bin.dis65 b/Softcard3/disassembly/disk3_driver.bin.dis65 new file mode 100644 index 0000000..f288c5f --- /dev/null +++ b/Softcard3/disassembly/disk3_driver.bin.dis65 @@ -0,0 +1,639 @@ +### 6502bench SourceGen dis65 v1.0 ### +{ +"_ContentVersion":4, +"FileDataLength":1536, +"FileDataCrc32":-2022280587, +"ProjectProps":{ +"CpuName":"6502", +"IncludeUndocumentedInstr":false, +"TwoByteBrk":true, +"EntryFlags":32702671, +"AutoLabelStyle":"Simple", +"AnalysisParams":{ +"AnalyzeUncategorizedData":true, +"DefaultTextScanMode":"LowHighAscii", +"MinCharsForString":4, +"SeekNearbyTargets":true, +"UseRelocData":false, +"SmartPlpHandling":false, +"SmartPlbHandling":true}, + +"PlatformSymbolFileIdentifiers":["RT:Apple/A3-ROM.sym65", +"RT:Apple/A3-IO.sym65", +"RT:Apple/SOS.sym65"], +"ExtensionScriptFileIdentifiers":["RT:Apple/SOS.cs"], +"ProjectSyms":{ +"BUF":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"BUF", +"Value":155, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_BUFH":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_BUFH", +"Value":5852, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_BUFL":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_BUFL", +"Value":5851, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_BUFX":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_BUFX", +"Value":5853, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_COMMAND":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_COMMAND", +"Value":5854, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_SECTOR":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_SECTOR", +"Value":5849, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_TRACK":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_TRACK", +"Value":5848, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"D_UNITNUM":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"D_UNITNUM", +"Value":5850, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"IRQMASK":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"IRQMASK", +"Value":212, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"IS_EXT":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"IS_EXT", +"Value":49387, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"MD_EXT1":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"MD_EXT1", +"Value":49362, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"MOTORON":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"MOTORON", +"Value":49385, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"MS_EXT1":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"MS_EXT1", +"Value":49363, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"MS_EXT2":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"MS_EXT2", +"Value":49361, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"RECALCNT":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"RECALCNT", +"Value":210, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SEEKWAIT":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SEEKWAIT", +"Value":211, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}}}, + +"AddressMap":[{ +"Offset":0, +"Addr":39424}], +"TypeHints":[{ +"Low":0, +"High":0, +"Hint":"Code"}, + +{ +"Low":245, +"High":245, +"Hint":"Code"}, + +{ +"Low":444, +"High":444, +"Hint":"Code"}, + +{ +"Low":709, +"High":709, +"Hint":"Code"}], +"StatusFlagOverrides":{ +}, + +"Comments":{ +"713":"drop screen bit", +"715":"environment save", +"721":"enable rom I/O space", +"726":"disable smooth scroll", +"729":"IF ALREADY SEI\u0027D, THEN WE", +"730":" STAY THAT WAY...", +"735":"\u0027I\u0027 bit into bit7", +"737":"dest pointer lsb", +"740":"rom diskio buf lsb", +"742":"dest pointer msb", +"745":"rom diskio buf msb", +"747":"dest pointer xbyte", +"750":"rom diskio buf xbyte", +"753":"down to 1MHz", +"769":"unit?", +"807":"branch if its a read", +"809":"back to 2Meg", +"817":"prenib monitor routine", +"824":"ARE WE ON-TRACK?", +"855":"GET DESTINATION TRACK", +"941":"postnib", +"962":"=\u003eGOOD WRITE", +"964":"=\u003eWRITE PROTECTED", +"1111":"get drivenum", +"1139":"(SETTIME) go setup motor delay", +"1217":"=\u003eALL DONE!", +"1220":"I/O SELECT EXTERNAL", +"1223":"ARE WE 2, 3, OR 4 ?", +"1233":"=\u003eALL DONE!", +"1244":"=\u003eALL DONE!", +"1247":"MOTOR SELECT", +"1250":" ONLY .D4", +"1253":"PROVIDE MOTOR POWER", +"1256":"SAY WE\u0027VE SELECTED", +"1258":" THIS DRIVE", +"1480":"SHOULD IRQ BE ENABLED?", +"1482":"=\u003eNO, LEAVE IT ALONE", +"1484":"ENABLE IRQ"}, + +"LongComments":{ +"-2147483647":{ +"Text":"6502bench SourceGen v1.7.2-dev1", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"709":{ +"Text":"main entry - floppy?\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"737":{ +"Text":"\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1479":{ +"Text":"**************************************************\r\n NAME : FIXIRQ\r\n FUNCTION: ENABLE IRQ IF APPROPRIATE\r\n INPUT : NONE\r\n DESTROYS: NOTHING\r\n**************************************************\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"948":{ +"Text":"******************************************************\r\n WRITE A SECTOR:\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"919":{ +"Text":"****************************************************\r\n READ A SECTOR:\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"890":{ +"Text":"\r\n FIND THE DESIRED SECTOR:\r\n\r\n NOTE: FINDSECT RETURNS WITH\r\n IRQ INHIBITED!\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"873":{ +"Text":"\r\n DELAY FOR ANY REMAINING MOTOR-UP TIME:\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"855":{ +"Text":"\r\n ISSUE THE SEEK:\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"820":{ +"Text":"********************************************************\r\n NAME : SECTORIO\r\n FUNCTION: READ OR WRITE A SECTOR\r\n INPUT : IBSTRK, IBSECT, MONTIME,\r\n RETURNS : CARRY CLEAR IF OK (AC=00)\r\n : CARRY SET IF ERROR (AC=ERRCODE)\r\n : SEEKWAIT ALL SETUP\r\n DESTROYS: ALL REGISTERS\r\n********************************************************\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}}, + +"Notes":{ +}, + +"UserLabels":{ +"1479":{ +"Label":"FIXIRQ", +"Value":40903, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"948":{ +"Label":"SIOWRITE", +"Value":40372, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"890":{ +"Label":"FINDIT", +"Value":40314, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"873":{ +"Label":"MDELAY", +"Value":40297, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"861":{ +"Label":"SOUGHT", +"Value":40285, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"847":{ +"Label":"SEEKDEL", +"Value":40271, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1497":{ +"Label":"DRVTRACK", +"Value":40921, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"820":{ +"Label":"SECTORIO", +"Value":40244, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1111":{ +"Label":"UNITSEL", +"Value":40535, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1189":{ +"Label":"SETTIME", +"Value":40613, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1220":{ +"Label":"SELEXT", +"Value":40644, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1236":{ +"Label":"NOTD2", +"Value":40660, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1253":{ +"Label":"UNITRET", +"Value":40677, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1489":{ +"Label":"DRIVESEL", +"Value":40913, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1247":{ +"Label":"ISD4", +"Value":40671, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1200":{ +"Label":"SELECT", +"Value":40624, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1173":{ +"Label":"GOFORIT", +"Value":40597, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1142":{ +"Label":"SPINNING", +"Value":40566, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"964":{ +"Label":"BADIO", +"Value":40388, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"966":{ +"Label":"IORETRY", +"Value":40390, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1488":{ +"Label":"VBLSAVE", +"Value":40912, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"970":{ +"Label":"TRYRECAL", +"Value":40394, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"997":{ +"Label":"NOTSAME", +"Value":40421, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1000":{ +"Label":"SIOERR", +"Value":40424, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1036":{ +"Label":"FINDSECT", +"Value":40460, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1423":{ +"Label":"MYSEEK2", +"Value":40847, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}}, + +"OperandFormats":{ +"745":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"BUF", +"Part":"Low"}}, + +"951":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"FIXIRQ", +"Part":"Low"}}}, + +"LvTables":{ +}, + +"Visualizations":[], +"VisualizationAnimations":[], +"VisualizationSets":{ +}, + +"RelocList":{ +}, + +"DbrValues":{ +}} diff --git a/Softcard3/disassembly/disk3_driver.bin.txt b/Softcard3/disassembly/disk3_driver.bin.txt new file mode 100644 index 0000000..6432249 --- /dev/null +++ b/Softcard3/disassembly/disk3_driver.bin.txt @@ -0,0 +1,861 @@ + ; 6502bench SourceGen v1.7.2-dev1 + IMASK .eq $8b + CURTRK .eq $8c + SECT .eq $98 + MONTIMEL .eq $99 + MONTIMEH .eq $9a + BUF .eq $9b + TRKN .eq $9e + RECALCNT .eq $d2 + SEEKWAIT .eq $d3 + IRQMASK .eq $d4 + D_TRACK .eq $16d8 + D_SECTOR .eq $16d9 + D_UNITNUM .eq $16da + D_BUFL .eq $16db + D_BUFH .eq $16dc + D_BUFX .eq $16dd + D_COMMAND .eq $16de + CLRPDL0 .eq $c058 ;Clear PDL0 (A/D Addr 0) + SETPDL0 .eq $c059 ;Set PDL0 (A/D Addr 0) + CLRPDL2 .eq $c05a ;Clear PDL2 (A/D Addr 2) + SETPDL2 .eq $c05b ;Set PDL2 (A/D Addr 2) + CLRPDLEN .eq $c05c ;Clear PDLEN (A/D Ramp Start) + SETPDLEN .eq $c05d ;Set PDLEN (A/D Ramp Start) + CLRPDL1 .eq $c05e ;Clear PDL1 (A/D Addr 1) + SETPDL1 .eq $c05f ;Set PDL1 (A/D Addr 1) + READSW0 .eq $c060 ;Read SW0 + READSW1 .eq $c061 ;Read SW1/MGNSW + READSW2 .eq $c062 ;Read SW2 + READSW3 .eq $c063 ;Read SW3/SCO + JOYRDY .eq $c066 ;Read PDLOT (A/D Ramp Stop) + CLOCK .eq $c070 ;clock + CLRDSA0 .eq $c0d0 ;Clear Drive Select A0 + MS_EXT2 .eq $c0d1 + MD_EXT1 .eq $c0d2 + MS_EXT1 .eq $c0d3 + CLREN1INT .eq $c0d4 + SETEN1INT .eq $c0d5 + CLRSCR .eq $c0d8 ;Clear Smooth Scroll (to turn smooth scroll off) + CLRENSEL .eq $c0dc ;Clear enable silentype port (ENSEL) + CLRENSIO .eq $c0de ;Clear enable silentype port (ENSIO) + MOTORON .eq $c0e9 + IS_EXT .eq $c0eb + READ16 .eq $f148 + RDADR16 .eq $f1b9 + WRITE16 .eq $f216 + SEEK .eq $f400 + MSWAIT .eq $f456 + ANALOG .eq $f4a8 + ANLOG1 .eq $f4ab + Z_REG .eq $ffd0 ;zero page register + D_TIMER2C_L .eq $ffd8 + D_TIMER2C_H .eq $ffd9 + D_ACR .eq $ffdb + D_IFR .eq $ffdd + E_REG .eq $ffdf ;environment register + E_IER .eq $ffee + + .org $9a00 ++000000 9a00: 20 ec 9a jsr L9AEC ++000003 9a03: a2 00 ldx #$00 ++000005 9a05: a0 12 ldy #$12 ++000007 9a07: a9 30 lda #$30 ++000009 9a09: d0 04 bne L9A0F + ++00000b 9a0b: e8 L9A0B inx ++00000c 9a0c: b9 e0 16 lda $16e0,y ++00000f 9a0f: 29 0f L9A0F and #$0f ++000011 9a11: 9d b1 9b sta L9BB1,x ++000014 9a14: 88 dey ++000015 9a15: c0 07 cpy #$07 ++000017 9a17: f0 f2 beq L9A0B ++000019 9a19: b9 e0 16 lda $16e0,y ++00001c 9a1c: 0a asl A ++00001d 9a1d: 0a asl A ++00001e 9a1e: 0a asl A ++00001f 9a1f: 0a asl A ++000020 9a20: 1d b1 9b ora L9BB1,x ++000023 9a23: 9d b1 9b sta L9BB1,x ++000026 9a26: 88 dey ++000027 9a27: 10 e2 bpl L9A0B ++000029 9a29: ad b8 9b lda L9BB8 ++00002c 9a2c: 20 8d 9b jsr L9B8D ++00002f 9a2f: aa tax ++000030 9a30: ad b9 9b lda L9BB9 ++000033 9a33: 20 8d 9b jsr L9B8D ++000036 9a36: a8 tay ++000037 9a37: 4a lsr A ++000038 9a38: 4a lsr A ++000039 9a39: 85 d2 sta RECALCNT ++00003b 9a3b: 98 tya ++00003c 9a3c: 29 03 and #$03 ++00003e 9a3e: d0 05 bne L9A45 ++000040 9a40: e0 03 cpx #$03 ++000042 9a42: 90 01 bcc L9A45 ++000044 9a44: 88 dey ++000045 9a45: 18 L9A45 clc ++000046 9a46: 98 tya ++000047 9a47: 65 d2 adc RECALCNT ++000049 9a49: 7d a4 9b adc L9BA4,x ++00004c 9a4c: 85 d2 sta RECALCNT ++00004e 9a4e: ad b7 9b lda L9BB7 ++000051 9a51: 20 8d 9b jsr L9B8D ++000054 9a54: 18 clc ++000055 9a55: 65 d2 adc RECALCNT ++000057 9a57: 38 sec ++000058 9a58: e9 07 L9A58 sbc #$07 ++00005a 9a5a: c9 08 cmp #$08 ++00005c 9a5c: b0 fa bcs L9A58 ++00005e 9a5e: 8d b6 9b sta L9BB6 ++000061 9a61: a9 d0 lda #$d0 ++000063 9a63: 85 d0 sta $d0 ++000065 9a65: a9 ff lda #$ff ++000067 9a67: 85 d1 sta $d1 ++000069 9a69: a9 8f lda #$8f ++00006b 9a6b: 8d d1 14 sta $14d1 ++00006e 9a6e: a9 a5 lda #$a5 ++000070 9a70: 85 d3 sta SEEKWAIT ++000072 9a72: a0 00 ldy #$00 ++000074 9a74: b9 b1 9b L9A74 lda L9BB1,y ++000077 9a77: 91 d0 sta ($d0),y ++000079 9a79: 45 d3 eor SEEKWAIT ++00007b 9a7b: 85 d3 sta SEEKWAIT ++00007d 9a7d: c8 iny ++00007e 9a7e: c0 0a cpy #$0a ++000080 9a80: 90 f2 bcc L9A74 ++000082 9a82: 91 d0 sta ($d0),y ++000084 9a84: ad d0 ff lda Z_REG ++000087 9a87: 48 pha ++000088 9a88: ad df ff lda E_REG ++00008b 9a8b: 48 pha ++00008c 9a8c: 09 80 ora #$80 ++00008e 9a8e: 8d df ff sta E_REG ++000091 9a91: a0 14 ldy #$14 ++000093 9a93: 8c d0 ff sty Z_REG ++000096 9a96: ad 70 c0 lda CLOCK ++000099 9a99: 30 48 bmi L9AE3 ++00009b 9a9b: a2 12 ldx #$12 ++00009d 9a9d: 8e d0 ff stx Z_REG ++0000a0 9aa0: a9 ff lda #$ff ++0000a2 9aa2: 8d 70 c0 sta CLOCK ++0000a5 9aa5: 8d 70 c0 sta CLOCK ++0000a8 9aa8: a2 01 ldx #$01 ++0000aa 9aaa: e8 L9AAA inx ++0000ab 9aab: 08 php ++0000ac 9aac: 78 sei ++0000ad 9aad: 8e d0 ff L9AAD stx Z_REG ++0000b0 9ab0: ad 70 c0 lda CLOCK ++0000b3 9ab3: bd b1 9b lda L9BB1,x ++0000b6 9ab6: 8d 70 c0 sta CLOCK ++0000b9 9ab9: ad 70 c0 lda CLOCK ++0000bc 9abc: 8c d0 ff sty Z_REG ++0000bf 9abf: ad 70 c0 lda CLOCK ++0000c2 9ac2: d0 e9 bne L9AAD ++0000c4 9ac4: 28 plp ++0000c5 9ac5: e0 07 cpx #$07 ++0000c7 9ac7: 90 e1 bcc L9AAA ++0000c9 9ac9: a2 0e ldx #$0e ++0000cb 9acb: 8e d0 ff stx Z_REG ++0000ce 9ace: ad b9 9b lda L9BB9 ++0000d1 9ad1: 09 cc ora #$cc ++0000d3 9ad3: 8d 70 c0 sta CLOCK ++0000d6 9ad6: ee d0 ff inc Z_REG ++0000d9 9ad9: ad b9 9b lda L9BB9 ++0000dc 9adc: 4a lsr A ++0000dd 9add: 4a lsr A ++0000de 9ade: 09 cc ora #$cc ++0000e0 9ae0: 8d 70 c0 sta CLOCK ++0000e3 9ae3: 68 L9AE3 pla ++0000e4 9ae4: 8d df ff sta E_REG ++0000e7 9ae7: 68 pla ++0000e8 9ae8: 8d d0 ff sta Z_REG ++0000eb 9aeb: 60 rts + ++0000ec 9aec: ad df ff L9AEC lda E_REG ++0000ef 9aef: 09 40 ora #$40 ++0000f1 9af1: 8d df ff sta E_REG ++0000f4 9af4: 60 rts + ++0000f5 9af5: 20 ec 9a jsr L9AEC ++0000f8 9af8: ad d0 ff lda Z_REG ++0000fb 9afb: 48 pha ++0000fc 9afc: ad df ff lda E_REG ++0000ff 9aff: 48 pha ++000100 9b00: 09 80 ora #$80 ++000102 9b02: 8d df ff sta E_REG ++000105 9b05: a9 00 lda #$00 ++000107 9b07: 8d e0 16 sta $16e0 ++00010a 9b0a: a0 14 ldy #$14 ++00010c 9b0c: 8c d0 ff sty Z_REG ++00010f 9b0f: ad 70 c0 lda CLOCK ++000112 9b12: 30 70 bmi L9B84 ++000114 9b14: a9 10 lda #$10 ++000116 9b16: 8d bb 9b sta L9BBB ++000119 9b19: a2 08 L9B19 ldx #$08 ++00011b 9b1b: 08 php ++00011c 9b1c: 78 sei ++00011d 9b1d: ca L9B1D dex ++00011e 9b1e: 30 19 bmi L9B39 ++000120 9b20: 8e d0 ff stx Z_REG ++000123 9b23: ad 70 c0 lda CLOCK ++000126 9b26: 9d d4 18 sta $18d4,x ++000129 9b29: 8c d0 ff sty Z_REG ++00012c 9b2c: ad 70 c0 lda CLOCK ++00012f 9b2f: f0 ec beq L9B1D ++000131 9b31: 28 plp ++000132 9b32: ce bb 9b dec L9BBB ++000135 9b35: 10 e2 bpl L9B19 ++000137 9b37: 30 4b bmi L9B84 + ++000139 9b39: 28 L9B39 plp ++00013a 9b3a: a2 0f ldx #$0f ++00013c 9b3c: 8e d0 ff stx Z_REG ++00013f 9b3f: ad 70 c0 lda CLOCK ++000142 9b42: 38 sec ++000143 9b43: 2a rol A ++000144 9b44: 2a rol A ++000145 9b45: ce d0 ff dec Z_REG ++000148 9b48: 2d 70 c0 and CLOCK ++00014b 9b4b: 8d dc 18 sta $18dc ++00014e 9b4e: a2 09 ldx #$09 ++000150 9b50: bd d4 18 L9B50 lda $18d4,x ++000153 9b53: 9d b1 9b sta L9BB1,x ++000156 9b56: ca dex ++000157 9b57: 10 f7 bpl L9B50 ++000159 9b59: a9 19 lda #$19 ++00015b 9b5b: 8d ba 9b sta L9BBA ++00015e 9b5e: a0 11 ldy #$11 ++000160 9b60: a2 00 ldx #$00 ++000162 9b62: bd b1 9b L9B62 lda L9BB1,x ++000165 9b65: 4a lsr A ++000166 9b66: 4a lsr A ++000167 9b67: 4a lsr A ++000168 9b68: 4a lsr A ++000169 9b69: 09 30 ora #$30 ++00016b 9b6b: 99 e0 16 sta $16e0,y ++00016e 9b6e: e8 inx ++00016f 9b6f: 88 dey ++000170 9b70: 30 12 bmi L9B84 ++000172 9b72: bd b1 9b L9B72 lda L9BB1,x ++000175 9b75: 29 0f and #$0f ++000177 9b77: 09 30 ora #$30 ++000179 9b79: 99 e0 16 sta $16e0,y ++00017c 9b7c: 88 dey ++00017d 9b7d: c0 07 cpy #$07 ++00017f 9b7f: d0 e1 bne L9B62 ++000181 9b81: e8 inx ++000182 9b82: d0 ee bne L9B72 ++000184 9b84: 68 L9B84 pla ++000185 9b85: 8d df ff sta E_REG ++000188 9b88: 68 pla ++000189 9b89: 8d d0 ff sta Z_REG ++00018c 9b8c: 60 rts + ++00018d 9b8d: 48 L9B8D pha ++00018e 9b8e: 4a lsr A ++00018f 9b8f: 4a lsr A ++000190 9b90: 4a lsr A ++000191 9b91: 4a lsr A ++000192 9b92: a8 tay ++000193 9b93: 68 pla ++000194 9b94: 29 0f and #$0f ++000196 9b96: 18 clc ++000197 9b97: 79 9b 9b adc L9B9B,y ++00019a 9b9a: 60 rts + ++00019b 9b9b: 00 L9B9B .dd1 $00 ++00019c 9b9c: 0a .dd1 $0a ++00019d 9b9d: 14 .dd1 $14 ++00019e 9b9e: 1e .dd1 $1e ++00019f 9b9f: 28 32 3c 46+ .str “(2GOOD WRITE ++0003c4 9dc4: 70 b4 BADIO bvs FINDIT ;=>WRITE PROTECTED ++0003c6 9dc6: c6 d1 IORETRY dec $d1 ++0003c8 9dc8: d0 b0 bne FINDIT ++0003ca 9dca: ad d0 9f TRYRECAL lda VBLSAVE ++0003cd 9dcd: 8d ee ff sta E_IER ++0003d0 9dd0: c6 d2 dec RECALCNT ++0003d2 9dd2: 30 14 bmi SIOERR ++0003d4 9dd4: 20 5e 9f jsr L9F5E ++0003d7 9dd7: ac da 16 ldy D_UNITNUM ++0003da 9dda: ad d8 16 lda D_TRACK ++0003dd 9ddd: d9 d9 9f cmp DRVTRACK,y ++0003e0 9de0: d0 03 bne NOTSAME ++0003e2 9de2: 4c 5d 9d jmp SOUGHT + ++0003e5 9de5: 4c 57 9d NOTSAME jmp L9D57 + ++0003e8 9de8: a9 27 SIOERR lda #$27 ++0003ea 9dea: 2c bit ▼ $2ba9 ++0003eb 9deb: a9 2b L9DEB lda #$2b ++0003ed 9ded: 2c bit ▼ a:$00a9 ++0003ee 9dee: a9 00 L9DEE lda #$00 ++0003f0 9df0: 48 L9DF0 pha ++0003f1 9df1: a9 01 lda #$01 ++0003f3 9df3: 20 42 9f jsr L9F42 ++0003f6 9df6: ad df ff lda E_REG ++0003f9 9df9: 29 20 and #$20 ++0003fb 9dfb: 0d cf 9f ora VBLSAVE-1 ++0003fe 9dfe: 8d df ff sta E_REG ++000401 9e01: 20 c7 9f jsr FIXIRQ ++000404 9e04: ad e8 c0 lda MOTORON-1 ++000407 9e07: 68 pla ++000408 9e08: d0 02 bne FINDSECT ++00040a 9e0a: 18 clc ++00040b 9e0b: 60 rts + ++00040c 9e0c: 38 FINDSECT sec ++00040d 9e0d: 20 5e 1a jsr $1a5e ++000410 9e10: a9 30 L9E10 lda #$30 ++000412 9e12: 85 d0 sta $d0 ++000414 9e14: 46 d5 lsr $d5 ++000416 9e16: a2 60 L9E16 ldx #$60 ++000418 9e18: 20 b9 f1 jsr RDADR16 ++00041b 9e1b: b0 20 bcs L9E3D ++00041d 9e1d: ad d8 16 lda D_TRACK ++000420 9e20: c5 99 cmp MONTIMEL ++000422 9e22: d0 28 bne L9E4C ++000424 9e24: ad d9 16 lda D_SECTOR ++000427 9e27: c5 98 cmp SECT ++000429 9e29: f0 26 beq L9E51 ++00042b 9e2b: a5 d5 lda $d5 ++00042d 9e2d: 30 0e bmi L9E3D ++00042f 9e2f: ad d9 16 lda D_SECTOR ++000432 9e32: 38 sec ++000433 9e33: 66 d5 ror $d5 ++000435 9e35: e5 98 sbc SECT ++000437 9e37: 29 0f and #$0f ++000439 9e39: 4a lsr A ++00043a 9e3a: 20 42 9f jsr L9F42 ++00043d 9e3d: 20 c7 9f L9E3D jsr FIXIRQ ++000440 9e40: c6 d0 dec $d0 ++000442 9e42: f0 08 beq L9E4C ++000444 9e44: a0 c8 ldy #$c8 ++000446 9e46: 88 L9E46 dey ++000447 9e47: d0 fd bne L9E46 ++000449 9e49: 4c 16 9e jmp L9E16 + ++00044c 9e4c: 20 c7 9f L9E4C jsr FIXIRQ ++00044f 9e4f: 38 sec ++000450 9e50: 24 bit ▼ $18 ++000451 9e51: 18 L9E51 clc ++000452 9e52: a9 00 lda #$00 ++000454 9e54: 85 9a sta MONTIMEH ++000456 9e56: 60 rts + ++000457 9e57: ac da 16 UNITSEL ldy D_UNITNUM ;get drivenum ++00045a 9e5a: 46 d3 lsr SEEKWAIT ++00045c 9e5c: 85 99 sta MONTIMEL ++00045e 9e5e: 85 9a sta MONTIMEH ++000460 9e60: 20 14 9f jsr L9F14 ++000463 9e63: d0 11 bne SPINNING ++000465 9e65: ae d5 c0 ldx SETEN1INT ++000468 9e68: a9 00 lda #$00 ++00046a 9e6a: 8d d1 9f sta DRIVESEL ++00046d 9e6d: 8d d5 9f sta L9FD5 ++000470 9e70: 20 00 9f jsr L9F00 ++000473 9e73: 4c a5 9e jmp SETTIME ;(SETTIME) go setup motor delay + ++000476 9e76: b9 d1 9f SPINNING lda DRIVESEL,y ++000479 9e79: d0 1a bne GOFORIT ++00047b 9e7b: c0 00 cpy #$00 ++00047d 9e7d: f0 26 beq SETTIME ++00047f 9e7f: a9 00 lda #$00 ++000481 9e81: 0d d4 9f ora DRIVESEL+3 ++000484 9e84: 0d d3 9f ora DRIVESEL+2 ++000487 9e87: 0d d2 9f ora DRIVESEL+1 ++00048a 9e8a: f0 19 beq SETTIME ++00048c 9e8c: 38 sec ++00048d 9e8d: 66 d3 ror SEEKWAIT ++00048f 9e8f: 20 00 9f jsr L9F00 ++000492 9e92: 4c a5 9e jmp SETTIME + ++000495 9e95: ae de 16 GOFORIT ldx D_COMMAND ++000498 9e98: bd dc 9f lda DRVTRACK+3,x ++00049b 9e9b: 38 sec ++00049c 9e9c: f9 d5 9f sbc L9FD5,y ++00049f 9e9f: b0 0f bcs SELECT ++0004a1 9ea1: a9 00 lda #$00 ++0004a3 9ea3: f0 0b beq SELECT + ++0004a5 9ea5: a9 00 SETTIME lda #$00 ++0004a7 9ea7: 99 d5 9f sta L9FD5,y ++0004aa 9eaa: ae de 16 ldx D_COMMAND ++0004ad 9ead: bd dc 9f lda DRVTRACK+3,x ++0004b0 9eb0: 49 ff SELECT eor #$ff ++0004b2 9eb2: 18 clc ++0004b3 9eb3: 69 01 adc #$01 ++0004b5 9eb5: 85 9a sta MONTIMEH ++0004b7 9eb7: c0 01 cpy #$01 ++0004b9 9eb9: b0 09 bcs SELEXT ++0004bb 9ebb: ad ea c0 lda IS_EXT-1 ++0004be 9ebe: ad d4 c0 lda CLREN1INT ++0004c1 9ec1: 4c e5 9e jmp UNITRET ;=>ALL DONE! + ++0004c4 9ec4: ad eb c0 SELEXT lda IS_EXT ;I/O SELECT EXTERNAL ++0004c7 9ec7: c0 02 cpy #$02 ;ARE WE 2, 3, OR 4 ? ++0004c9 9ec9: b0 09 bcs NOTD2 ++0004cb 9ecb: ad d2 c0 lda MD_EXT1 ++0004ce 9ece: ad d1 c0 lda MS_EXT2 ++0004d1 9ed1: 4c e5 9e jmp UNITRET ;=>ALL DONE! + ++0004d4 9ed4: d0 09 NOTD2 bne ISD4 ++0004d6 9ed6: ad d3 c0 lda MS_EXT1 ++0004d9 9ed9: ad d0 c0 lda CLRDSA0 ++0004dc 9edc: 4c e5 9e jmp UNITRET ;=>ALL DONE! + ++0004df 9edf: ad d3 c0 ISD4 lda MS_EXT1 ;MOTOR SELECT ++0004e2 9ee2: ad d1 c0 lda MS_EXT2 ; ONLY .D4 ++0004e5 9ee5: ad e9 c0 UNITRET lda MOTORON ;PROVIDE MOTOR POWER ++0004e8 9ee8: a9 01 lda #$01 ;SAY WE'VE SELECTED ++0004ea 9eea: 99 d1 9f sta DRIVESEL,y ; THIS DRIVE ++0004ed 9eed: a5 9a lda MONTIMEH ++0004ef 9eef: 10 22 bpl L9F13 ++0004f1 9ef1: a0 05 ldy #$05 ++0004f3 9ef3: a9 64 L9EF3 lda #$64 ++0004f5 9ef5: 20 56 f4 jsr MSWAIT ++0004f8 9ef8: 88 dey ++0004f9 9ef9: d0 f8 bne L9EF3 ++0004fb 9efb: a9 02 lda #$02 ++0004fd 9efd: 4c 42 9f jmp L9F42 + ++000500 9f00: ad d2 c0 L9F00 lda MD_EXT1 ++000503 9f03: ad d0 c0 lda CLRDSA0 ++000506 9f06: a2 03 ldx #$03 ++000508 9f08: a9 00 lda #$00 ++00050a 9f0a: 9d d1 9f L9F0A sta DRIVESEL,x ++00050d 9f0d: 9d d5 9f sta L9FD5,x ++000510 9f10: ca dex ++000511 9f11: d0 f7 bne L9F0A ++000513 9f13: 60 L9F13 rts + ++000514 9f14: a2 03 L9F14 ldx #$03 ++000516 9f16: ad ec c0 L9F16 lda $c0ec ++000519 9f19: cd ec c0 cmp $c0ec ++00051c 9f1c: d0 1f bne L9F3D ++00051e 9f1e: cd ec c0 cmp $c0ec ++000521 9f21: d0 1a bne L9F3D ++000523 9f23: cd ec c0 cmp $c0ec ++000526 9f26: d0 15 bne L9F3D ++000528 9f28: cd ec c0 cmp $c0ec ++00052b 9f2b: d0 10 bne L9F3D ++00052d 9f2d: cd ec c0 cmp $c0ec ++000530 9f30: d0 0b bne L9F3D ++000532 9f32: cd ec c0 cmp $c0ec ++000535 9f35: d0 06 bne L9F3D ++000537 9f37: cd ec c0 cmp $c0ec ++00053a 9f3a: d0 01 bne L9F3D ++00053c 9f3c: 60 rts + ++00053d 9f3d: ca L9F3D dex ++00053e 9f3e: d0 d6 bne L9F16 ++000540 9f40: ca dex ++000541 9f41: 60 rts + ++000542 9f42: 48 L9F42 pha ++000543 9f43: a0 04 ldy #$04 ++000545 9f45: b9 d0 9f L9F45 lda VBLSAVE,y ++000548 9f48: f0 0f beq L9F59 ++00054a 9f4a: 68 pla ++00054b 9f4b: 48 pha ++00054c 9f4c: 18 clc ++00054d 9f4d: 79 d4 9f adc DRIVESEL+3,y ++000550 9f50: c9 29 cmp #$29 ++000552 9f52: 90 02 bcc L9F56 ++000554 9f54: a9 28 lda #$28 ++000556 9f56: 99 d4 9f L9F56 sta DRIVESEL+3,y ++000559 9f59: 88 L9F59 dey ++00055a 9f5a: d0 e9 bne L9F45 ++00055c 9f5c: 68 pla ++00055d 9f5d: 60 rts + ++00055e 9f5e: a9 02 L9F5E lda #$02 ++000560 9f60: 48 L9F60 pha ++000561 9f61: a2 60 ldx #$60 ++000563 9f63: 20 b9 f1 jsr RDADR16 ++000566 9f66: 90 09 bcc L9F71 ++000568 9f68: 20 b9 f1 jsr RDADR16 ++00056b 9f6b: 90 04 bcc L9F71 ++00056d 9f6d: a9 30 lda #$30 ++00056f 9f6f: d0 05 bne L9F76 + ++000571 9f71: a5 99 L9F71 lda MONTIMEL ++000573 9f73: 18 clc ++000574 9f74: 69 03 adc #$03 ++000576 9f76: ac da 16 L9F76 ldy D_UNITNUM ++000579 9f79: 99 d9 9f sta DRVTRACK,y ++00057c 9f7c: 20 c7 9f jsr FIXIRQ ++00057f 9f7f: a9 00 lda #$00 ++000581 9f81: 85 9a sta MONTIMEH ++000583 9f83: 85 99 sta MONTIMEL ++000585 9f85: 20 8f 9f jsr MYSEEK2 ++000588 9f88: 68 pla ++000589 9f89: a8 tay ++00058a 9f8a: 88 dey ++00058b 9f8b: 98 tya ++00058c 9f8c: d0 d2 bne L9F60 ++00058e 9f8e: 60 rts + ++00058f 9f8f: 85 9e MYSEEK2 sta TRKN ++000591 9f91: ac da 16 ldy D_UNITNUM ++000594 9f94: b9 d9 9f lda DRVTRACK,y ++000597 9f97: 0a asl A ++000598 9f98: 85 8c sta CURTRK ++00059a 9f9a: a2 60 ldx #$60 ++00059c 9f9c: a5 9a lda MONTIMEH ++00059e 9f9e: 85 d5 sta $d5 ++0005a0 9fa0: 08 php ++0005a1 9fa1: 78 sei ++0005a2 9fa2: ad ee ff lda E_IER ++0005a5 9fa5: 29 18 and #$18 ++0005a7 9fa7: 8d d0 9f sta VBLSAVE ++0005aa 9faa: 8d ee ff sta E_IER ++0005ad 9fad: 28 plp ++0005ae 9fae: a5 9e lda TRKN ++0005b0 9fb0: 99 d9 9f sta DRVTRACK,y ++0005b3 9fb3: 0a asl A ++0005b4 9fb4: 20 00 f4 jsr SEEK ++0005b7 9fb7: ad d0 9f lda VBLSAVE ++0005ba 9fba: 09 80 ora #$80 ++0005bc 9fbc: 8d ee ff sta E_IER ++0005bf 9fbf: a5 9a lda MONTIMEH ++0005c1 9fc1: 38 sec ++0005c2 9fc2: e5 d5 sbc $d5 ++0005c4 9fc4: 4c 42 9f jmp L9F42 + + ; ************************************************** + ; NAME : FIXIRQ + ; FUNCTION: ENABLE IRQ IF APPROPRIATE + ; INPUT : NONE + ; DESTROYS: NOTHING + ; ************************************************** ++0005c7 9fc7: 48 FIXIRQ pha ++0005c8 9fc8: a5 d4 lda IRQMASK ;SHOULD IRQ BE ENABLED? ++0005ca 9fca: 30 01 bmi L9FCD ;=>NO, LEAVE IT ALONE ++0005cc 9fcc: 58 cli ;ENABLE IRQ ++0005cd 9fcd: 68 L9FCD pla ++0005ce 9fce: 60 rts + ++0005cf 9fcf: 00 .dd1 $00 ++0005d0 9fd0: 00 VBLSAVE .dd1 $00 ++0005d1 9fd1: 00 DRIVESEL .dd1 $00 ++0005d2 9fd2: 00 .dd1 $00 ++0005d3 9fd3: 00 .dd1 $00 ++0005d4 9fd4: 00 .dd1 $00 ++0005d5 9fd5: 00 L9FD5 .dd1 $00 ++0005d6 9fd6: 00 .dd1 $00 ++0005d7 9fd7: 00 .dd1 $00 ++0005d8 9fd8: 00 .dd1 $00 ++0005d9 9fd9: 00 DRVTRACK .dd1 $00 ++0005da 9fda: 00 .dd1 $00 ++0005db 9fdb: 00 .dd1 $00 ++0005dc 9fdc: 00 .dd1 $00 ++0005dd 9fdd: 08 .dd1 $08 ++0005de 9fde: 27 .dd1 $27 ++0005df 9fdf: 00 00 00 00+ .fill 33,$00 diff --git a/Softcard3/disassembly/softcard disassembly notes.txt b/Softcard3/disassembly/softcard disassembly notes.txt new file mode 100644 index 0000000..c208620 --- /dev/null +++ b/Softcard3/disassembly/softcard disassembly notes.txt @@ -0,0 +1,46 @@ +boot block0 loaded to $A000 +loads 24 blocks from $a200 on +12k - $3000 +$A200 - $D1FF + +moves floppy driver to 9a00 - 9fff + +and some dispatch area to $1900-$1fff + + +a200-a6ff +a700-adff -> 1900-1fff ; dispatch api - dummy sos + extras +ae00-b3ff -> 9a00-9fff : disk driver and extras - bank1 +b400-ceff -> e400-feff : cpm? +cf00-cfff -> 1600-16ff : ?? + + +slot 1 c090-9f +slot 2 c0a0-af +slot 3 c0b0-bf +slot 4 c0c0-cf + +Address Map +a3 z80 +2000 0000 +3000 1000 +4000 2000 +5000 3000 +6000 4000 +7000 5000 +8000 6000 +9000 7000 +A000 8000 +B000 9000 +C000 A000 +D000 B000 +E000 C000 +F000 D000 -- df -> 16 +1000 E000 -- e4 -> ff, e5 -> 14, e6 -> 15 +0000 F000 + + + +patch disk image for booting of hd +00df 79 f4 -> 00 02 block0 - offset df +7b4 c5 9c -> 16 02 block3 - offset 1b4 \ No newline at end of file diff --git a/Softcard3/disassembly/softcard_block0-23.bin.dis65 b/Softcard3/disassembly/softcard_block0-23.bin.dis65 new file mode 100644 index 0000000..97857c2 --- /dev/null +++ b/Softcard3/disassembly/softcard_block0-23.bin.dis65 @@ -0,0 +1,1605 @@ +### 6502bench SourceGen dis65 v1.0 ### +{ +"_ContentVersion":4, +"FileDataLength":12288, +"FileDataCrc32":905738404, +"ProjectProps":{ +"CpuName":"6502", +"IncludeUndocumentedInstr":false, +"TwoByteBrk":true, +"EntryFlags":32702671, +"AutoLabelStyle":"Simple", +"AnalysisParams":{ +"AnalyzeUncategorizedData":true, +"DefaultTextScanMode":"LowHighAscii", +"MinCharsForString":4, +"SeekNearbyTargets":true, +"UseRelocData":false, +"SmartPlpHandling":true, +"SmartPlbHandling":true}, + +"PlatformSymbolFileIdentifiers":["RT:Apple/A3-ROM.sym65", +"RT:Apple/A3-IO.sym65", +"RT:Apple/SOS.sym65"], +"ExtensionScriptFileIdentifiers":["RT:Apple/SOS.cs"], +"ProjectSyms":{ +}}, + +"AddressMap":[{ +"Offset":0, +"Addr":40960}], +"TypeHints":[{ +"Low":0, +"High":0, +"Hint":"Code"}, + +{ +"Low":208, +"High":208, +"Hint":"Code"}, + +{ +"Low":496, +"High":496, +"Hint":"Code"}, + +{ +"Low":497, +"High":497, +"Hint":"Data"}, + +{ +"Low":498, +"High":502, +"Hint":"Code"}, + +{ +"Low":504, +"High":504, +"Hint":"Code"}, + +{ +"Low":507, +"High":507, +"Hint":"Code"}, + +{ +"Low":518, +"High":518, +"Hint":"Code"}, + +{ +"Low":522, +"High":522, +"Hint":"Code"}, + +{ +"Low":533, +"High":533, +"Hint":"Code"}, + +{ +"Low":872, +"High":872, +"Hint":"Data"}, + +{ +"Low":875, +"High":875, +"Hint":"Code"}, + +{ +"Low":878, +"High":878, +"Hint":"Code"}, + +{ +"Low":881, +"High":881, +"Hint":"Code"}, + +{ +"Low":1808, +"High":1808, +"Hint":"Code"}, + +{ +"Low":1811, +"High":1811, +"Hint":"Code"}, + +{ +"Low":1814, +"High":1814, +"Hint":"Code"}, + +{ +"Low":1817, +"High":1817, +"Hint":"Code"}, + +{ +"Low":1820, +"High":1820, +"Hint":"Code"}, + +{ +"Low":1823, +"High":1823, +"Hint":"Code"}, + +{ +"Low":1826, +"High":1826, +"Hint":"Code"}, + +{ +"Low":1829, +"High":1829, +"Hint":"Code"}, + +{ +"Low":1832, +"High":1832, +"Hint":"Code"}, + +{ +"Low":1835, +"High":1835, +"Hint":"Code"}, + +{ +"Low":1838, +"High":1838, +"Hint":"Code"}, + +{ +"Low":1841, +"High":1841, +"Hint":"Code"}, + +{ +"Low":1920, +"High":1920, +"Hint":"Code"}, + +{ +"Low":1923, +"High":1923, +"Hint":"Code"}, + +{ +"Low":1926, +"High":1926, +"Hint":"Code"}, + +{ +"Low":1929, +"High":1929, +"Hint":"Code"}, + +{ +"Low":1968, +"High":1968, +"Hint":"Code"}, + +{ +"Low":1977, +"High":1977, +"Hint":"Code"}, + +{ +"Low":1986, +"High":1986, +"Hint":"Code"}, + +{ +"Low":1995, +"High":1995, +"Hint":"Code"}, + +{ +"Low":2004, +"High":2004, +"Hint":"Code"}, + +{ +"Low":2013, +"High":2013, +"Hint":"Code"}, + +{ +"Low":2025, +"High":2025, +"Hint":"Code"}, + +{ +"Low":2032, +"High":2032, +"Hint":"Code"}, + +{ +"Low":2142, +"High":2142, +"Hint":"Code"}, + +{ +"Low":2153, +"High":2153, +"Hint":"Code"}, + +{ +"Low":2191, +"High":2191, +"Hint":"Code"}, + +{ +"Low":2206, +"High":2206, +"Hint":"Code"}, + +{ +"Low":2310, +"High":2310, +"Hint":"Code"}, + +{ +"Low":2337, +"High":2337, +"Hint":"Code"}, + +{ +"Low":2408, +"High":2408, +"Hint":"Code"}, + +{ +"Low":2431, +"High":2431, +"Hint":"Code"}, + +{ +"Low":2515, +"High":2515, +"Hint":"Code"}, + +{ +"Low":2525, +"High":2525, +"Hint":"Code"}, + +{ +"Low":2675, +"High":2675, +"Hint":"Code"}, + +{ +"Low":2938, +"High":2938, +"Hint":"Code"}, + +{ +"Low":2941, +"High":2941, +"Hint":"Code"}, + +{ +"Low":3046, +"High":3046, +"Hint":"Code"}, + +{ +"Low":3075, +"High":3075, +"Hint":"Code"}, + +{ +"Low":3166, +"High":3166, +"Hint":"Code"}, + +{ +"Low":3225, +"High":3225, +"Hint":"Code"}, + +{ +"Low":3256, +"High":3256, +"Hint":"Code"}, + +{ +"Low":3281, +"High":3281, +"Hint":"Code"}, + +{ +"Low":3584, +"High":3584, +"Hint":"Code"}, + +{ +"Low":3820, +"High":3820, +"Hint":"Code"}, + +{ +"Low":3829, +"High":3829, +"Hint":"Code"}, + +{ +"Low":3986, +"High":3986, +"Hint":"Code"}, + +{ +"Low":3995, +"High":3996, +"Hint":"Data"}, + +{ +"Low":4028, +"High":4028, +"Hint":"Code"}, + +{ +"Low":4126, +"High":4126, +"Hint":"Code"}, + +{ +"Low":4183, +"High":4183, +"Hint":"Code"}, + +{ +"Low":4293, +"High":4293, +"Hint":"Code"}, + +{ +"Low":4695, +"High":4695, +"Hint":"Code"}, + +{ +"Low":4948, +"High":4948, +"Hint":"Code"}, + +{ +"Low":4958, +"High":4958, +"Hint":"Code"}, + +{ +"Low":5007, +"High":5007, +"Hint":"Code"}, + +{ +"Low":5063, +"High":5063, +"Hint":"Code"}], +"StatusFlagOverrides":{ +}, + +"Comments":{ +"18":"set zeropage to $18xx", +"28":"clear extended addressing bytes", +"31":"and stack area", +"39":"copy rom disk3 zp vars to current zp", +"47":"copy z80 test code to $2000", +"49":" this maps to 0000 in z80 land", +"58":"look for softcard", +"62":"looking for all 16 device select", +"65":" address\u0027s to return bit7=0", +"71":"yes, get back to first address in that slot", +"72":"enable reset on Softcard", +"77":"enable FFFC memory mapped io switch", +"89":"1M,no i/o,video,no nmi,rw ram,prim stk,prim rom, rom", +"99":"switch to Z80 (6502 halts)", +"102":"looking for this to be changed by the z80?", +"108":"loop $32 times waiting for change", +"124":"not found", +"131":"index to \u0027SOFTCARD NOT FOUND\u0027", +"133":"go print error", +"168":"index to \u0027REQUIRES 128K\u0027", +"170":"go print error", +"173":"start block 1", +"177":"into $A200", +"185":"special extended address \u00278f\u0027", +"187":"???", +"190":"read block", +"201":"end block $17", +"208":"xor a", +"209":"ld (80d6),a (a0d6 in 6502 land)", +"212":"out (00),a", +"215":"read", +"219":"x = msb for block (0)", +"220":"a = lsb for block", +"225":"carry=error", +"231":"index to \u0027I/O ERROR\u0027", +"349":"7 pages to move", +"351":"forward?", +"353":"from $a700", +"355":"to $1900", +"357":"move memory", +"380":"select bank1", +"385":"27 pages", +"389":"from $b400", +"391":"to $e400", +"393":"move memory", +"396":"1 page", +"400":"from cf00", +"402":"to $1600 ( - $16ff)", +"404":"move memory", +"418":"6 pages", +"422":"From $ae00", +"424":"to $9a00 (- $9fff)", +"429":"move memory (without setting A=0)", +"444":"load z80 reset vector", +"466":"init acia, via\u0027s, ??", +"496":"Z80 JP $DA00 - reset vector?", +"499":"driver file loaded into bank 0 $2100", +"510":"all good, now process it", +"512":"compare loaded file header", +"515":"to make sure its a sos.driver file", +"520":"index to \u0027BAD DRIVER FILE\u0027", +"522":"go print error", +"960":"from page", +"962":"to page", +"971":"bank", +"974":"start from page", +"977":"start to page", +"1625":"go print \u0027bad driver file\u0027", +"1971":"disk3 driver entry", +"4305":"ENABLE ROM/IO SPACE", +"4310":"DISABLE SMOOTHSCROLL", +"4427":"ADDTIME", +"4442":"MYSEEK", +"4463":"addtime", +"4471":"MDELAY", +"4486":"VBLSAVE", +"4490":"FINDSECT", +"4497":"D_COMMAND", +"4525":"postnib??"}, + +"LongComments":{ +"-2147483647":{ +"Text":"6502bench SourceGen v1.5.0", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"4474":{ +"Text":"\r\nFIND THE DESIRED SECTOR:\r\n\r\n\r\nFINDIT\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"4431":{ +"Text":"SEEKDEL\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"4457":{ +"Text":"MDELAY\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"4503":{ +"Text":"Read a Sector\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"4293":{ +"Text":"Main entry point - disk3\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"958":{ +"Text":"move memory block?", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"5120":{ +"Text":"CPM\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1792":{ +"Text":"Moved to $1900 (-$1fff)\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"3584":{ +"Text":"\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"208":{ +"Text":"z80 code", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}}, + +"Notes":{ +}, + +"UserLabels":{ +}, + +"OperandFormats":{ +"42":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"5120":{ +"Length":2942, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"11933":{ +"Length":94, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"12074":{ +"Length":32, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"12117":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12118":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12119":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12120":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12121":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12122":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12123":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12124":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12125":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12126":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12127":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12128":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12129":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12130":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12131":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12132":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12133":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12134":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12135":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12136":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12137":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12138":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12139":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12140":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12141":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12142":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12143":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12144":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12145":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12146":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12147":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12148":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12149":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12150":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12151":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12152":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12153":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12154":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12155":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12156":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12157":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12158":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12159":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12160":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12161":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12162":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12163":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12164":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12165":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12166":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12167":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12168":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12169":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12170":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12171":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12172":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12173":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12174":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12175":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12176":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12177":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12178":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12179":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12180":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12181":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12182":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12183":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12184":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12185":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12186":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12187":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12188":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12189":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12190":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12191":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12192":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12193":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12194":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12195":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12196":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12197":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12198":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12199":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12200":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12201":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12202":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12203":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12204":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12205":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12206":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12207":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12208":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12209":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12210":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12211":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12212":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12213":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12214":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12215":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12216":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12217":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12218":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12219":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12220":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12221":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12222":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12223":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12224":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12225":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12226":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12227":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12228":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12229":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12230":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12231":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12232":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12233":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12234":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12235":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12236":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12237":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12238":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12239":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12240":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12241":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12242":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12243":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12244":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12245":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12246":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12247":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12248":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12249":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12250":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12251":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12252":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12253":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12254":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12255":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12256":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12257":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12258":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12259":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12260":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12261":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12262":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12263":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12264":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12265":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12266":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12267":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12268":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12269":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12270":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12271":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12272":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12273":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12274":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12275":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12276":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12277":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12278":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12279":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12280":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12281":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12282":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12283":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12284":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12285":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12286":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"12287":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}}, + +"LvTables":{ +}, + +"Visualizations":[], +"VisualizationAnimations":[], +"VisualizationSets":{ +}, + +"RelocList":{ +}, + +"DbrValues":{ +}} diff --git a/Softcard3/disassembly/softcard_block0-23.bin.txt b/Softcard3/disassembly/softcard_block0-23.bin.txt new file mode 100644 index 0000000..600fbc7 --- /dev/null +++ b/Softcard3/disassembly/softcard_block0-23.bin.txt @@ -0,0 +1,5809 @@ + ; 6502bench SourceGen v1.5.0 + IBSLOT .eq $81 + IBBUFP .eq $85 + IBCMD .eq $87 + IMASK .eq $8b + CURTRK .eq $8c + SECT .eq $98 + MONTIMEL .eq $99 + MONTIMEH .eq $9a + BUF .eq $9b + TRKN .eq $9e + READ16 .eq $f148 + RDADR16 .eq $f1b9 + WRITE16 .eq $f216 + PRENIB16 .eq $f2c4 + POSTNIB16 .eq $f30f + SEEK .eq $f400 + MSWAIT .eq $f456 + BLOCKIO .eq $f479 + ANALOG .eq $f4a8 + ANLOG1 .eq $f4ab + Z_REG .eq $ffd0 ;zero page register + D_DDRB .eq $ffd2 ;data direction register B + D_DDRA .eq $ffd3 ;data direction register A + D_TIMER2C_L .eq $ffd8 + D_TIMER2C_H .eq $ffd9 + D_ACR .eq $ffdb + D_PCR .eq $ffdc + D_IFR .eq $ffdd + D_IER .eq $ffde + E_REG .eq $ffdf ;environment register + E_IORB .eq $ffe0 + E_DDRB .eq $ffe2 + E_DDRA .eq $ffe3 + E_ACR .eq $ffeb + E_PCR .eq $ffec + E_IFR .eq $ffed + E_IER .eq $ffee + B_REG .eq $ffef ;bank switch register + + .org $a000 ++000000 a000: 78 sei ++000001 a001: a9 40 lda #$40 ++000003 a003: 8d ca ff sta $ffca ++000006 a006: d8 cld ++000007 a007: a9 f7 lda #$f7 ++000009 a009: 8d df ff sta E_REG ++00000c a00c: a2 fb ldx #$fb ++00000e a00e: 9a txs ++00000f a00f: 2c 10 c0 bit LC010 ++000012 a012: a9 18 lda #$18 ;set zeropage to $18xx ++000014 a014: 8d d0 ff sta Z_REG ++000017 a017: a2 00 ldx #$00 ++000019 a019: 8a txa ++00001a a01a: 95 00 LA01A sta $00,x ++00001c a01c: 9d 00 14 sta $1400,x ;clear extended addressing bytes ++00001f a01f: 9d 00 01 sta $0100,x ;and stack area ++000022 a022: e8 inx ++000023 a023: d0 f5 bne LA01A ++000025 a025: a2 1f ldx #$1f ++000027 a027: bd 80 03 LA027 lda $0380,x ;copy rom disk3 zp vars to current zp ++00002a a02a: 95 80 sta $80,x ++00002c a02c: ca dex ++00002d a02d: d0 f8 bne LA027 ++00002f a02f: a0 05 ldy #$05 ;copy z80 test code to $2000 ++000031 a031: b9 d0 a0 LA031 lda LA0D0,y ; this maps to 0000 in z80 land ++000034 a034: 99 00 20 sta $2000,y ++000037 a037: 88 dey ++000038 a038: 10 f7 bpl LA031 ++00003a a03a: a0 4f ldy #$4f ;look for softcard ++00003c a03c: a2 10 LA03C ldx #$10 ++00003e a03e: b9 80 c0 LA03E lda LC080,y ;looking for all 16 device select ++000041 a041: 30 33 bmi LA076 ; address's to return bit7=0 ++000043 a043: 88 dey ++000044 a044: ca dex ++000045 a045: d0 f7 bne LA03E ++000047 a047: c8 iny ;yes, get back to first address in that slot ++000048 a048: a9 01 lda #$01 ;enable reset on Softcard ++00004a a04a: 99 80 c0 sta LC080,y ++00004d a04d: a9 10 lda #$10 ;enable FFFC memory mapped io switch ++00004f a04f: 99 80 c0 sta LC080,y ++000052 a052: b9 80 c0 lda LC080,y ++000055 a055: c9 50 cmp #$50 ++000057 a057: d0 1d bne LA076 ++000059 a059: a9 a7 lda #$a7 ;1M,no i/o,video,no nmi,rw ram,prim stk,prim rom, rom ++00005b a05b: 8d df ff sta E_REG ++00005e a05e: 8d d6 a0 sta LA0D6 ++000061 a061: a2 32 ldx #$32 ++000063 a063: ad fc ff lda $fffc ;switch to Z80 (6502 halts) ++000066 a066: ad d6 a0 LA066 lda LA0D6 ;looking for this to be changed by the z80? ++000069 a069: f0 03 beq LA06E ++00006b a06b: ca dex ++00006c a06c: d0 f8 bne LA066 ;loop $32 times waiting for change ++00006e a06e: a2 f7 LA06E ldx #$f7 ++000070 a070: 8e df ff stx E_REG ++000073 a073: aa tax ++000074 a074: f0 12 beq LA088 ++000076 a076: 98 LA076 tya ++000077 a077: 29 f0 and #$f0 ++000079 a079: 38 sec ++00007a a07a: e9 10 sbc #$10 ++00007c a07c: f0 05 beq LA083 ;not found ++00007e a07e: 09 0f ora #$0f ++000080 a080: a8 tay ++000081 a081: d0 b9 bne LA03C ++000083 a083: a0 47 LA083 ldy #$47 ;index to 'SOFTCARD NOT FOUND' ++000085 a085: 4c e9 a0 jmp LA0E9 ;go print error + ++000088 a088: a9 77 LA088 lda #$77 ++00008a a08a: 8d df ff sta E_REG ++00008d a08d: 98 tya ++00008e a08e: 48 pha ++00008f a08f: a9 07 lda #$07 ++000091 a091: 8d ef ff sta B_REG ++000094 a094: a2 00 ldx #$00 ++000096 a096: ce ef ff LA096 dec B_REG ++000099 a099: 8e 00 20 stx $2000 ++00009c a09c: ad 00 20 lda $2000 ++00009f a09f: d0 f5 bne LA096 ++0000a1 a0a1: ad ef ff lda B_REG ++0000a4 a0a4: c9 f2 cmp #$f2 ++0000a6 a0a6: b0 05 bcs LA0AD ++0000a8 a0a8: a0 31 LA0A8 ldy #$31 ;index to 'REQUIRES 128K' ++0000aa a0aa: 4c e9 a0 jmp LA0E9 ;go print error + ++0000ad a0ad: a9 01 LA0AD lda #$01 ;start block 1 ++0000af a0af: 85 e0 sta $e0 ++0000b1 a0b1: a9 00 lda #$00 ;into $A200 ++0000b3 a0b3: 85 85 sta IBBUFP ++0000b5 a0b5: a9 a2 lda #$a2 ++0000b7 a0b7: 85 86 sta $86 ++0000b9 a0b9: a9 8f lda #$8f ;special extended address '8f' ++0000bb a0bb: 8d 9c 14 sta $149c ;??? ++0000be a0be: 20 d7 a0 LA0BE jsr LA0D7 ;read block ++0000c1 a0c1: e6 86 inc $86 ++0000c3 a0c3: e6 86 inc $86 ++0000c5 a0c5: e6 e0 inc $e0 ++0000c7 a0c7: a5 e0 lda $e0 ++0000c9 a0c9: c9 18 cmp #$18 ;end block $17 ++0000cb a0cb: 90 f1 bcc LA0BE ++0000cd a0cd: 4c 5d a1 jmp LA15D + + ; z80 code ++0000d0 a0d0: af LA0D0 .dd1 $af ;xor a ++0000d1 a0d1: 32 .dd1 $32 ;ld (80d6),a (a0d6 in 6502 land) ++0000d2 a0d2: d6 .dd1 $d6 ++0000d3 a0d3: 80 .dd1 $80 ++0000d4 a0d4: d3 .dd1 $d3 ;out (00),a ++0000d5 a0d5: 00 .dd1 $00 ++0000d6 a0d6: ff LA0D6 .dd1 $ff + ++0000d7 a0d7: a2 01 LA0D7 ldx #$01 ;read ++0000d9 a0d9: 86 87 stx IBCMD ++0000db a0db: ca dex ;x = msb for block (0) ++0000dc a0dc: a5 e0 lda $e0 ;a = lsb for block ++0000de a0de: 20 79 f4 jsr BLOCKIO ++0000e1 a0e1: b0 04 bcs LA0E7 ;carry=error ++0000e3 a0e3: 60 rts + ++0000e4 a0e4: a0 .dd1 $a0 ++0000e5 a0e5: 00 .dd1 $00 ++0000e6 a0e6: 2c .dd1 $2c + ++0000e7 a0e7: a0 3e LA0E7 ldy #$3e ;index to 'I/O ERROR' ++0000e9 a0e9: a9 77 LA0E9 lda #$77 ++0000eb a0eb: 8d df ff sta E_REG ++0000ee a0ee: ad 40 c0 lda LC040 ++0000f1 a0f1: a2 00 ldx #$00 ++0000f3 a0f3: b9 04 a1 LA0F3 lda LA104,y ++0000f6 a0f6: 48 pha ++0000f7 a0f7: 29 7f and #$7f ++0000f9 a0f9: 9d b3 05 sta $05b3,x ++0000fc a0fc: e8 inx ++0000fd a0fd: c8 iny ++0000fe a0fe: 68 pla ++0000ff a0ff: 10 f2 bpl LA0F3 ++000101 a101: 4c 01 a1 LA101 jmp LA101 + ++000104 a104: 4e 4f 20 46+ LA104 .str “NO FILE DRIVER.SO” ++000115 a115: d3 .dd1 $d3 ++000116 a116: 42 41 44 20+ .str “BAD DRIVER FIL” ++000124 a124: c5 .dd1 $c5 ++000125 a125: 54 4f 4f 20+ .str “TOO MANY DRIVER” ++000134 a134: d3 .dd1 $d3 ++000135 a135: 52 45 51 55+ .str “REQUIRES 128” ++000141 a141: cb .dd1 $cb ++000142 a142: 49 2f 4f 20+ .str “I/O ERRO” ++00014a a14a: d2 .dd1 $d2 ++00014b a14b: 53 4f 46 54+ .str “SOFTCARD NOT FOUN” ++00015c a15c: c4 .dd1 $c4 + ++00015d a15d: a9 07 LA15D lda #$07 ;7 pages to move ++00015f a15f: 85 14 sta $14 ;forward? ++000161 a161: a2 a7 ldx #$a7 ;from $a700 ++000163 a163: a0 19 ldy #$19 ;to $1900 ++000165 a165: 20 be a3 jsr LA3BE ;move memory ++000168 a168: ad ef ff lda B_REG ++00016b a16b: 29 0f and #$0f ++00016d a16d: 8d 01 19 sta $1901 ++000170 a170: 0a asl A ++000171 a171: 18 clc ++000172 a172: 69 04 adc #$04 ++000174 a174: 8d 00 19 sta $1900 ++000177 a177: a9 8f lda #$8f ++000179 a179: 8d 12 14 sta $1412 ++00017c a17c: a9 01 lda #$01 ;select bank1 ++00017e a17e: 8d ef ff sta B_REG ++000181 a181: a9 1b lda #$1b ;27 pages ++000183 a183: 85 14 sta $14 ++000185 a185: a2 b4 ldx #$b4 ;from $b400 ++000187 a187: a0 e4 ldy #$e4 ;to $e400 ++000189 a189: 20 be a3 jsr LA3BE ;move memory ++00018c a18c: a9 01 lda #$01 ;1 page ++00018e a18e: 85 14 sta $14 ++000190 a190: a2 cf ldx #$cf ;from cf00 ++000192 a192: a0 16 ldy #$16 ;to $1600 ( - $16ff) ++000194 a194: 20 be a3 jsr LA3BE ;move memory ++000197 a197: a0 10 ldy #$10 ++000199 a199: b9 ef 1f LA199 lda $1fef,y ++00019c a19c: 99 af 16 sta $16af,y ++00019f a19f: 88 dey ++0001a0 a1a0: d0 f7 bne LA199 ++0001a2 a1a2: a9 06 lda #$06 ;6 pages ++0001a4 a1a4: 85 14 sta $14 ++0001a6 a1a6: a2 ae ldx #$ae ;From $ae00 ++0001a8 a1a8: a0 9a ldy #$9a ;to $9a00 (- $9fff) ++0001aa a1aa: ad 01 19 lda $1901 ++0001ad a1ad: 20 c0 a3 jsr LA3C0 ;move memory (without setting A=0) ++0001b0 a1b0: 68 pla ++0001b1 a1b1: 09 80 ora #$80 ++0001b3 a1b3: 8d 93 16 sta $1693 ++0001b6 a1b6: 8d 18 1a sta $1a18 ++0001b9 a1b9: 8d a6 1a sta $1aa6 ++0001bc a1bc: a0 02 ldy #$02 ;load z80 reset vector ++0001be a1be: b9 f0 a1 LA1BE lda LA1F0,y ++0001c1 a1c1: 99 00 20 sta $2000,y ++0001c4 a1c4: 88 dey ++0001c5 a1c5: 10 f7 bpl LA1BE ++0001c7 a1c7: ad 01 19 lda $1901 ++0001ca a1ca: 8d ef ff sta B_REG ++0001cd a1cd: a9 d7 lda #$d7 ++0001cf a1cf: 8d df ff sta E_REG ++0001d2 a1d2: 20 74 a3 jsr LA374 ;init acia, via's, ?? ++0001d5 a1d5: a9 60 lda #$60 ++0001d7 a1d7: 85 81 sta IBSLOT ++0001d9 a1d9: 20 14 9f jsr $9f14 ++0001dc a1dc: f0 05 beq LA1E3 ++0001de a1de: a9 08 lda #$08 ++0001e0 a1e0: 8d d5 9f sta $9fd5 ++0001e3 a1e3: a9 01 LA1E3 lda #$01 ++0001e5 a1e5: 8d d1 9f sta $9fd1 ++0001e8 a1e8: a5 8c lda CURTRK ++0001ea a1ea: 8d d9 9f sta $9fd9 ++0001ed a1ed: 4c 9e 1a jmp $1a9e + ++0001f0 a1f0: c3 LA1F0 .dd1 $c3 ;Z80 JP $DA00 - reset vector? ++0001f1 a1f1: 00 .dd1 $00 ++0001f2 a1f2: da .dd1 $da + ++0001f3 a1f3: 78 sei ;driver file loaded into bank 0 $2100 ++0001f4 a1f4: 68 pla ++0001f5 a1f5: 68 pla ++0001f6 a1f6: a0 00 ldy #$00 ++0001f8 a1f8: 8c ef ff sty B_REG ++0001fb a1fb: a0 08 ldy #$08 ++0001fd a1fd: 88 LA1FD dey ++0001fe a1fe: 30 15 bmi LA215 ;all good, now process it ++000200 a200: b9 00 21 lda $2100,y ;compare loaded file header ++000203 a203: d9 0d a2 cmp LA20D,y ;to make sure its a sos.driver file ++000206 a206: f0 f5 beq LA1FD ++000208 a208: a0 12 LA208 ldy #$12 ;index to 'BAD DRIVER FILE' ++00020a a20a: 4c e9 a0 jmp LA0E9 ;go print error + ++00020d a20d: 53 4f 53 20+ LA20D .str “SOS DRVR” + ++000215 a215: a9 80 LA215 lda #$80 ++000217 a217: 8d 12 14 sta $1412 ++00021a a21a: 8d 06 14 sta $1406 ++00021d a21d: 8d 0e 14 sta $140e ++000220 a220: 8d 08 14 sta $1408 ++000223 a223: 8d 0c 14 sta $140c ++000226 a226: 8d 01 14 sta $1401 ++000229 a229: a9 1c lda #$1c ++00022b a22b: 85 11 sta $11 ++00022d a22d: a2 01 ldx #$01 ++00022f a22f: a0 0c ldy #$0c ++000231 a231: a9 04 lda #$04 ++000233 a233: 85 14 sta $14 ++000235 a235: a9 00 lda #$00 ++000237 a237: 85 13 sta $13 ++000239 a239: 85 15 sta $15 ++00023b a23b: 20 c0 a3 jsr LA3C0 ++00023e a23e: a0 00 ldy #$00 ++000240 a240: b9 2c 25 LA240 lda $252c,y ++000243 a243: 99 00 17 sta $1700,y ++000246 a246: c8 iny ++000247 a247: d0 f7 bne LA240 ++000249 a249: a9 08 lda #$08 ++00024b a24b: 85 00 sta $00 ++00024d a24d: a9 01 lda #$01 ++00024f a24f: 85 01 sta $01 ++000251 a251: a9 00 lda #$00 ++000253 a253: 85 15 sta $15 ++000255 a255: a9 9a lda #$9a ++000257 a257: 85 16 sta $16 ++000259 a259: ad 01 19 lda $1901 ++00025c a25c: 85 02 sta $02 ++00025e a25e: 20 70 a4 jsr LA470 ++000261 a261: 20 5f a4 LA261 jsr LA45F ++000264 a264: b0 16 bcs LA27C ++000266 a266: 20 98 a4 jsr LA498 ++000269 a269: 70 f6 bvs LA261 ++00026b a26b: 20 8a a6 jsr LA68A ++00026e a26e: 20 c6 a6 jsr LA6C6 ++000271 a271: a5 02 lda $02 ++000273 a273: 20 c4 a3 jsr LA3C4 ++000276 a276: 20 fd a3 jsr LA3FD ++000279 a279: 4c 61 a2 jmp LA261 + ++00027c a27c: a9 d4 LA27C lda #$d4 ++00027e a27e: 8d df ff sta E_REG ++000281 a281: 20 74 a3 jsr LA374 ++000284 a284: a2 05 ldx #$05 ++000286 a286: bd 68 a3 LA286 lda LA368,x ++000289 a289: 9d fa ff sta $fffa,x ++00028c a28c: bd 6e a3 lda LA36E,x ++00028f a28f: 9d ca ff sta $ffca,x ++000292 a292: ca dex ++000293 a293: 10 f1 bpl LA286 ++000295 a295: a9 d0 lda #$d0 ++000297 a297: 85 f0 sta $f0 ++000299 a299: a9 ff lda #$ff ++00029b a29b: 85 f1 sta $f1 ++00029d a29d: a9 8f lda #$8f ++00029f a29f: 8d f1 14 sta $14f1 ++0002a2 a2a2: a9 a5 lda #$a5 ++0002a4 a2a4: 85 f2 sta $f2 ++0002a6 a2a6: ad 01 19 lda $1901 ++0002a9 a2a9: 8d ef ff sta B_REG ++0002ac a2ac: a0 00 ldy #$00 ++0002ae a2ae: b1 f0 LA2AE lda ($f0),y ++0002b0 a2b0: 99 b1 9b sta $9bb1,y ++0002b3 a2b3: 45 f2 eor $f2 ++0002b5 a2b5: 85 f2 sta $f2 ++0002b7 a2b7: c8 iny ++0002b8 a2b8: c0 0a cpy #$0a ++0002ba a2ba: 90 f2 bcc LA2AE ++0002bc a2bc: d1 f0 cmp ($f0),y ++0002be a2be: f0 08 beq LA2C8 ++0002c0 a2c0: a9 00 lda #$00 ++0002c2 a2c2: 88 LA2C2 dey ++0002c3 a2c3: 99 b1 9b sta $9bb1,y ++0002c6 a2c6: d0 fa bne LA2C2 ++0002c8 a2c8: a9 01 LA2C8 lda #$01 ++0002ca a2ca: 8d ef ff sta B_REG ++0002cd a2cd: a9 82 lda #$82 ++0002cf a2cf: 8d de ff sta D_IER ++0002d2 a2d2: a0 0f ldy #$0f ++0002d4 a2d4: 98 LA2D4 tya ++0002d5 a2d5: 48 pha ++0002d6 a2d6: b9 d7 1a lda $1ad7,y ++0002d9 a2d9: f0 05 beq LA2E0 ++0002db a2db: a2 08 ldx #$08 ++0002dd a2dd: 20 27 1b jsr $1b27 ++0002e0 a2e0: 68 LA2E0 pla ++0002e1 a2e1: a8 tay ++0002e2 a2e2: 88 dey ++0002e3 a2e3: d0 ef bne LA2D4 ++0002e5 a2e5: a9 bc lda #$bc ++0002e7 a2e7: 85 18 sta $18 ++0002e9 a2e9: a9 e2 lda #$e2 ++0002eb a2eb: 85 19 sta $19 ++0002ed a2ed: a9 c0 lda #$c0 ++0002ef a2ef: 48 LA2EF pha ++0002f0 a2f0: aa tax ++0002f1 a2f1: 4a lsr A ++0002f2 a2f2: 4a lsr A ++0002f3 a2f3: 4a lsr A ++0002f4 a2f4: 4a lsr A ++0002f5 a2f5: a8 tay ++0002f6 a2f6: bd f0 1e lda $1ef0,x ++0002f9 a2f9: f0 10 beq LA30B ++0002fb a2fb: 30 0e bmi LA30B ++0002fd a2fd: b9 d7 1a lda $1ad7,y ++000300 a300: d0 08 bne LA30A ++000302 a302: a9 80 lda #$80 ++000304 a304: c0 0c cpy #$0c ++000306 a306: f0 03 beq LA30B ++000308 a308: a0 00 ldy #$00 ++00030a a30a: 98 LA30A tya ++00030b a30b: 99 b4 16 LA30B sta $16b4,y ++00030e a30e: 30 03 bmi LA313 ++000310 a310: 20 73 a5 jsr LA573 ++000313 a313: 68 LA313 pla ++000314 a314: 18 clc ++000315 a315: 69 10 adc #$10 ++000317 a317: 90 d6 bcc LA2EF ++000319 a319: a9 34 lda #$34 ++00031b a31b: 8d df ff sta E_REG ++00031e a31e: 58 cli ++00031f a31f: a9 a0 lda #$a0 ++000321 a321: a2 08 ldx #$08 ++000323 a323: a0 77 LA323 ldy #$77 ++000325 a325: 99 00 04 LA325 sta $0400,y ++000328 a328: 99 80 04 LA328 sta $0480,y ++00032b a32b: 88 dey ++00032c a32c: 10 f7 bpl LA325 ++00032e a32e: ee 27 a3 inc LA325+2 ++000331 a331: ee 2a a3 inc LA328+2 ++000334 a334: ca dex ++000335 a335: d0 ec bne LA323 ++000337 a337: e6 11 LA337 inc $11 ++000339 a339: d0 fc bne LA337 ++00033b a33b: e8 inx ++00033c a33c: d0 f9 bne LA337 ++00033e a33e: 38 sec ++00033f a33f: 6e 06 19 ror $1906 ++000342 a342: ad 03 20 lda $2003 ++000345 a345: a2 00 ldx #$00 ++000347 a347: 86 ba LA347 stx $ba ++000349 a349: 48 pha ++00034a a34a: 20 d3 1b jsr $1bd3 ++00034d a34d: aa tax ++00034e a34e: fe c8 16 inc $16c8,x ++000351 a351: d0 05 bne LA358 ++000353 a353: a2 06 ldx #$06 ++000355 a355: 20 27 1b jsr $1b27 ++000358 a358: a5 ba LA358 lda $ba ++00035a a35a: 18 clc ++00035b a35b: 69 04 adc #$04 ++00035d a35d: aa tax ++00035e a35e: 68 pla ++00035f a35f: 4a lsr A ++000360 a360: 4a lsr A ++000361 a361: e0 10 cpx #$10 ++000363 a363: d0 e2 bne LA347 ++000365 a365: 4c 9e 1a jmp $1a9e + ++000368 a368: 7d LA368 .dd1 $7d ++000369 a369: 1d .dd1 $1d ++00036a a36a: 9e .dd1 $9e ++00036b a36b: 1a .dd1 $1a ++00036c a36c: 73 .dd1 $73 ++00036d a36d: 1c .dd1 $1c + ++00036e a36e: 4c 7d 1d LA36E jmp $1d7d + ++000371 a371: 4c 73 1c jmp $1c73 + ++000374 a374: a9 00 LA374 lda #$00 ++000376 a376: 8d f1 c0 sta LC0F1 ++000379 a379: 8d f2 c0 sta LC0F2 ++00037c a37c: a9 ff lda #$ff ++00037e a37e: 8d d2 ff sta D_DDRB ++000381 a381: 8d d3 ff sta D_DDRA ++000384 a384: 8d e0 ff sta E_IORB ++000387 a387: a9 3f lda #$3f ++000389 a389: 8d e2 ff sta E_DDRB ++00038c a38c: a9 0f lda #$0f ++00038e a38e: 8d e3 ff sta E_DDRA ++000391 a391: a9 00 lda #$00 ++000393 a393: 8d db ff sta D_ACR ++000396 a396: 8d eb ff sta E_ACR ++000399 a399: a9 76 lda #$76 ++00039b a39b: 8d dc ff sta D_PCR ++00039e a39e: a9 62 lda #$62 ++0003a0 a3a0: 8d ec ff sta E_PCR ++0003a3 a3a3: a9 7f lda #$7f ++0003a5 a3a5: 8d ed ff sta E_IFR ++0003a8 a3a8: 8d ee ff sta E_IER ++0003ab a3ab: 8d dd ff sta D_IFR ++0003ae a3ae: 8d de ff sta D_IER ++0003b1 a3b1: 2c d8 c0 bit LC0D8 ++0003b4 a3b4: 2c da c0 bit LC0DA ++0003b7 a3b7: 2c dc c0 bit LC0DC ++0003ba a3ba: 2c de c0 bit LC0DE ++0003bd a3bd: 60 rts + + ; move memory block? ++0003be a3be: a9 00 LA3BE lda #$00 ++0003c0 a3c0: 86 12 LA3C0 stx $12 ;from page ++0003c2 a3c2: 84 16 sty $16 ;to page ++0003c4 a3c4: aa LA3C4 tax ++0003c5 a3c5: ad ef ff lda B_REG ++0003c8 a3c8: 8e ef ff stx B_REG ++0003cb a3cb: 48 pha ;bank ++0003cc a3cc: a5 12 lda $12 ++0003ce a3ce: 48 pha ;start from page ++0003cf a3cf: a5 16 lda $16 ++0003d1 a3d1: 48 pha ;start to page ++0003d2 a3d2: a6 14 ldx $14 ++0003d4 a3d4: f0 10 beq LA3E6 ++0003d6 a3d6: a0 00 ldy #$00 ++0003d8 a3d8: b1 11 LA3D8 lda ($11),y ++0003da a3da: 91 15 sta ($15),y ++0003dc a3dc: c8 iny ++0003dd a3dd: d0 f9 bne LA3D8 ++0003df a3df: e6 12 inc $12 ++0003e1 a3e1: e6 16 inc $16 ++0003e3 a3e3: ca dex ++0003e4 a3e4: d0 f2 bne LA3D8 ++0003e6 a3e6: a4 13 LA3E6 ldy $13 ++0003e8 a3e8: f0 08 beq LA3F2 ++0003ea a3ea: 88 LA3EA dey ++0003eb a3eb: b1 11 lda ($11),y ++0003ed a3ed: 91 15 sta ($15),y ++0003ef a3ef: 98 tya ++0003f0 a3f0: d0 f8 bne LA3EA ++0003f2 a3f2: 68 LA3F2 pla ++0003f3 a3f3: 85 16 sta $16 ++0003f5 a3f5: 68 pla ++0003f6 a3f6: 85 12 sta $12 ++0003f8 a3f8: 68 pla ++0003f9 a3f9: 8d ef ff sta B_REG ++0003fc a3fc: 60 rts + ++0003fd a3fd: a5 03 LA3FD lda $03 ++0003ff a3ff: 18 clc ++000400 a400: 65 15 adc $15 ++000402 a402: 85 03 sta $03 ++000404 a404: a5 04 lda $04 ++000406 a406: 65 16 adc $16 ++000408 a408: 85 04 sta $04 ++00040a a40a: a5 02 lda $02 ++00040c a40c: 8d ef ff sta B_REG ++00040f a40f: a0 14 LA40F ldy #$14 ++000411 a411: b1 03 lda ($03),y ++000413 a413: 29 0f and #$0f ++000415 a415: aa tax ++000416 a416: a5 02 lda $02 ++000418 a418: 9d e6 1a sta $1ae6,x ++00041b a41b: 18 clc ++00041c a41c: a5 03 lda $03 ++00041e a41e: 69 04 adc #$04 ++000420 a420: 9d aa 1a sta $1aaa,x ++000423 a423: a5 04 lda $04 ++000425 a425: 69 00 adc #$00 ++000427 a427: 9d b9 1a sta $1ab9,x ++00042a a42a: 38 sec ++00042b a42b: a0 02 ldy #$02 ++00042d a42d: b1 03 lda ($03),y ++00042f a42f: e9 01 sbc #$01 ++000431 a431: 9d c8 1a sta $1ac8,x ++000434 a434: c8 iny ++000435 a435: b1 03 lda ($03),y ++000437 a437: e9 00 sbc #$00 ++000439 a439: 9d d7 1a sta $1ad7,x ++00043c a43c: a0 16 ldy #$16 ++00043e a43e: b1 03 lda ($03),y ++000440 a440: 9d f6 1a sta $1af6,x ++000443 a443: a0 00 ldy #$00 ++000445 a445: b1 03 lda ($03),y ++000447 a447: aa tax ++000448 a448: c8 iny ++000449 a449: 11 03 ora ($03),y ++00044b a44b: f0 11 beq LA45E ++00044d a44d: b1 03 lda ($03),y ++00044f a44f: e4 03 cpx $03 ++000451 a451: d0 04 bne LA457 ++000453 a453: c5 04 cmp $04 ++000455 a455: f0 07 beq LA45E ++000457 a457: 86 03 LA457 stx $03 ++000459 a459: 85 04 sta $04 ++00045b a45b: 4c 0f a4 jmp LA40F + ++00045e a45e: 60 LA45E rts + ++00045f a45f: a0 01 LA45F ldy #$01 ++000461 a461: b1 00 lda ($00),y ++000463 a463: c9 ff cmp #$ff ++000465 a465: d0 01 bne LA468 ++000467 a467: 60 rts + ++000468 a468: 20 70 a4 LA468 jsr LA470 ++00046b a46b: a2 11 ldx #$11 ++00046d a46d: 20 72 a4 jsr LA472 ++000470 a470: a2 0d LA470 ldx #$0d ++000472 a472: a5 00 LA472 lda $00 ++000474 a474: 18 clc ++000475 a475: 69 02 adc #$02 ++000477 a477: 95 00 sta $00,x ++000479 a479: a4 01 ldy $01 ++00047b a47b: 90 01 bcc LA47E ++00047d a47d: c8 iny ++00047e a47e: 94 01 LA47E sty $01,x ++000480 a480: a0 00 ldy #$00 ++000482 a482: b1 00 lda ($00),y ++000484 a484: 95 02 sta $02,x ++000486 a486: 18 clc ++000487 a487: 75 00 adc $00,x ++000489 a489: 48 pha ++00048a a48a: c8 iny ++00048b a48b: b1 00 lda ($00),y ++00048d a48d: 95 03 sta $03,x ++00048f a48f: 75 01 adc $01,x ++000491 a491: 85 01 sta $01 ++000493 a493: 68 pla ++000494 a494: 85 00 sta $00 ++000496 a496: 18 clc ++000497 a497: 60 rts + ++000498 a498: 38 LA498 sec ++000499 a499: 20 e0 a4 LA499 jsr LA4E0 ++00049c a49c: 50 03 bvc LA4A1 ++00049e a49e: 90 f9 bcc LA499 ++0004a0 a4a0: 60 rts + ++0004a1 a4a1: 08 LA4A1 php ++0004a2 a4a2: 38 sec ++0004a3 a4a3: a5 07 lda $07 ++0004a5 a4a5: 85 05 sta $05 ++0004a7 a4a7: e5 11 sbc $11 ++0004a9 a4a9: 85 03 sta $03 ++0004ab a4ab: a5 08 lda $08 ++0004ad a4ad: 85 06 sta $06 ++0004af a4af: e5 12 sbc $12 ++0004b1 a4b1: 85 04 sta $04 ++0004b3 a4b3: 28 plp ++0004b4 a4b4: b0 28 bcs LA4DE ++0004b6 a4b6: 20 e0 a4 LA4B6 jsr LA4E0 ++0004b9 a4b9: 08 php ++0004ba a4ba: a0 00 ldy #$00 ++0004bc a4bc: 70 15 bvs LA4D3 ++0004be a4be: 38 sec ++0004bf a4bf: a5 07 lda $07 ++0004c1 a4c1: e5 11 sbc $11 ++0004c3 a4c3: 91 05 sta ($05),y ++0004c5 a4c5: c8 iny ++0004c6 a4c6: a5 08 lda $08 ++0004c8 a4c8: aa tax ++0004c9 a4c9: e5 12 sbc $12 ++0004cb a4cb: 91 05 sta ($05),y ++0004cd a4cd: 86 06 stx $06 ++0004cf a4cf: a5 07 lda $07 ++0004d1 a4d1: 85 05 sta $05 ++0004d3 a4d3: 28 LA4D3 plp ++0004d4 a4d4: 90 e0 bcc LA4B6 ++0004d6 a4d6: a0 00 ldy #$00 ++0004d8 a4d8: 98 tya ++0004d9 a4d9: 91 05 sta ($05),y ++0004db a4db: c8 iny ++0004dc a4dc: 91 05 sta ($05),y ++0004de a4de: b8 LA4DE clv ++0004df a4df: 60 rts + ++0004e0 a4e0: 90 0a LA4E0 bcc LA4EC ++0004e2 a4e2: a5 11 lda $11 ++0004e4 a4e4: 85 07 sta $07 ++0004e6 a4e6: a5 12 lda $12 ++0004e8 a4e8: 85 08 sta $08 ++0004ea a4ea: d0 10 bne LA4FC ++0004ec a4ec: a0 00 LA4EC ldy #$00 ++0004ee a4ee: a5 11 lda $11 ++0004f0 a4f0: 71 07 adc ($07),y ++0004f2 a4f2: aa tax ++0004f3 a4f3: c8 iny ++0004f4 a4f4: a5 12 lda $12 ++0004f6 a4f6: 71 07 adc ($07),y ++0004f8 a4f8: 85 08 sta $08 ++0004fa a4fa: 86 07 stx $07 ++0004fc a4fc: a0 14 LA4FC ldy #$14 ++0004fe a4fe: b1 07 lda ($07),y ++000500 a500: 30 05 bmi LA507 ++000502 a502: 2c 32 a5 LA502 bit LA532 ++000505 a505: 70 20 bvs LA527 ++000507 a507: 48 LA507 pha ++000508 a508: 20 33 a5 jsr LA533 ++00050b a50b: 68 pla ++00050c a50c: b0 f4 bcs LA502 ++00050e a50e: 29 40 and #$40 ++000510 a510: 85 09 sta $09 ++000512 a512: 85 0a sta $0a ++000514 a514: f0 11 beq LA527 ++000516 a516: 18 clc ++000517 a517: a9 22 lda #$22 ++000519 a519: a0 20 ldy #$20 ++00051b a51b: 71 11 adc ($11),y ++00051d a51d: 85 09 sta $09 ++00051f a51f: c8 iny ++000520 a520: a9 00 lda #$00 ++000522 a522: 71 11 adc ($11),y ++000524 a524: 85 0a sta $0a ++000526 a526: b8 clv ++000527 a527: a0 00 LA527 ldy #$00 ++000529 a529: b1 07 lda ($07),y ++00052b a52b: c8 iny ++00052c a52c: 11 07 ora ($07),y ++00052e a52e: 38 sec ++00052f a52f: f0 01 beq LA532 ++000531 a531: 18 clc ++000532 a532: 60 LA532 rts + ++000533 a533: a2 10 LA533 ldx #$10 ++000535 a535: a0 17 ldy #$17 ++000537 a537: b1 07 lda ($07),y ++000539 a539: 10 02 bpl LA53D ++00053b a53b: a2 c0 ldx #$c0 ++00053d a53d: a0 04 LA53D ldy #$04 ++00053f a53f: b1 07 lda ($07),y ++000541 a541: dd f0 1e cmp $1ef0,x ++000544 a544: 85 17 sta $17 ++000546 a546: d0 1d bne LA565 ++000548 a548: e8 LA548 inx ++000549 a549: c8 iny ++00054a a54a: b1 07 lda ($07),y ++00054c a54c: dd f0 1e cmp $1ef0,x ++00054f a54f: d0 14 bne LA565 ++000551 a551: 8a txa ++000552 a552: 29 0f and #$0f ++000554 a554: c5 17 cmp $17 ++000556 a556: 90 f0 bcc LA548 ++000558 a558: 8a txa ++000559 a559: 4a lsr A ++00055a a55a: 4a lsr A ++00055b a55b: 4a lsr A ++00055c a55c: 4a lsr A ++00055d a55d: a0 14 ldy #$14 ++00055f a55f: 11 07 ora ($07),y ++000561 a561: 91 07 sta ($07),y ++000563 a563: 18 clc ++000564 a564: 60 rts + ++000565 a565: 8a LA565 txa ++000566 a566: 18 clc ++000567 a567: 69 10 adc #$10 ++000569 a569: b0 07 bcs LA572 ++00056b a56b: 29 f0 and #$f0 ++00056d a56d: aa tax ++00056e a56e: e0 c0 cpx #$c0 ++000570 a570: d0 cb bne LA53D ++000572 a572: 60 LA572 rts + ++000573 a573: a8 LA573 tay ++000574 a574: 8a txa ++000575 a575: 29 f0 and #$f0 ++000577 a577: 85 1c sta $1c ++000579 a579: b9 e6 1a lda $1ae6,y ++00057c a57c: 8d ef ff sta B_REG ++00057f a57f: b9 aa 1a lda $1aaa,y ++000582 a582: 85 15 sta $15 ++000584 a584: b9 b9 1a lda $1ab9,y ++000587 a587: 85 16 sta $16 ++000589 a589: 98 tya ++00058a a58a: 0a asl A ++00058b a58b: 0a asl A ++00058c a58c: 0a asl A ++00058d a58d: 0a asl A ++00058e a58e: 85 1c sta $1c ++000590 a590: a0 16 ldy #$16 ++000592 a592: b1 15 lda ($15),y ++000594 a594: aa tax ++000595 a595: c8 iny ++000596 a596: b1 15 lda ($15),y ++000598 a598: c9 40 cmp #$40 ++00059a a59a: 90 04 bcc LA5A0 ++00059c a59c: a9 40 lda #$40 ++00059e a59e: a2 00 ldx #$00 ++0005a0 a5a0: 86 1a LA5A0 stx $1a ++0005a2 a5a2: 85 1b sta $1b ++0005a4 a5a4: 86 1d stx $1d ++0005a6 a5a6: 85 1e sta $1e ++0005a8 a5a8: a2 01 ldx #$01 ++0005aa a5aa: e8 LA5AA inx ++0005ab a5ab: a5 1d lda $1d ++0005ad a5ad: 38 sec ++0005ae a5ae: e9 40 sbc #$40 ++0005b0 a5b0: 85 1d sta $1d ++0005b2 a5b2: a5 1e lda $1e ++0005b4 a5b4: e9 02 sbc #$02 ++0005b6 a5b6: 85 1e sta $1e ++0005b8 a5b8: b0 f0 bcs LA5AA ++0005ba a5ba: 8a txa ++0005bb a5bb: 4a lsr A ++0005bc a5bc: a8 tay ++0005bd a5bd: a9 00 lda #$00 ++0005bf a5bf: 8d f7 1e sta $1ef7 ++0005c2 a5c2: 38 LA5C2 sec ++0005c3 a5c3: 6a ror A ++0005c4 a5c4: 6e f7 1e ror $1ef7 ++0005c7 a5c7: ca dex ++0005c8 a5c8: d0 f8 bne LA5C2 ++0005ca a5ca: 8d f6 1e sta $1ef6 ++0005cd a5cd: 98 tya ++0005ce a5ce: 4a lsr A ++0005cf a5cf: a8 tay ++0005d0 a5d0: a9 7f lda #$7f ++0005d2 a5d2: b0 03 bcs LA5D7 ++0005d4 a5d4: a9 ff lda #$ff ++0005d6 a5d6: 88 dey ++0005d7 a5d7: 8d f4 1e LA5D7 sta $1ef4 ++0005da a5da: 8c f5 1e sty $1ef5 ++0005dd a5dd: 84 1e sty $1e ++0005df a5df: aa tax ++0005e0 a5e0: a0 13 ldy #$13 ++0005e2 a5e2: b1 15 lda ($15),y ++0005e4 a5e4: 29 20 and #$20 ++0005e6 a5e6: f0 0c beq LA5F4 ++0005e8 a5e8: e8 inx ++0005e9 a5e9: 8a txa ++0005ea a5ea: d0 02 bne LA5EE ++0005ec a5ec: e6 1e inc $1e ++0005ee a5ee: 46 1e LA5EE lsr $1e ++0005f0 a5f0: 6a ror A ++0005f1 a5f1: 46 1e lsr $1e ++0005f3 a5f3: 6a ror A ++0005f4 a5f4: 8d f8 1e LA5F4 sta $1ef8 ++0005f7 a5f7: 48 pha ++0005f8 a5f8: a9 01 lda #$01 ++0005fa a5fa: 8d ef ff sta B_REG ++0005fd a5fd: 20 5d a6 jsr LA65D ++000600 a600: a4 1b ldy $1b ++000602 a602: 38 sec ++000603 a603: e9 03 sbc #$03 ++000605 a605: 85 1a sta $1a ++000607 a607: 8d f2 1e sta $1ef2 ++00060a a60a: b0 03 bcs LA60F ++00060c a60c: 88 dey ++00060d a60d: 84 1b sty $1b ++00060f a60f: 8c f3 1e LA60F sty $1ef3 ++000612 a612: a2 01 ldx #$01 ++000614 a614: 98 tya ++000615 a615: d0 02 bne LA619 ++000617 a617: a2 03 ldx #$03 ++000619 a619: 8e f1 1e LA619 stx $1ef1 ++00061c a61c: 20 5d a6 jsr LA65D ++00061f a61f: 18 clc ++000620 a620: 69 01 adc #$01 ++000622 a622: 85 1a sta $1a ++000624 a624: a2 0e ldx #$0e ++000626 a626: 20 6b a6 jsr LA66B ++000629 a629: 68 pla ++00062a a62a: 20 2f a6 jsr LA62F ++00062d a62d: a5 1a lda $1a ++00062f a62f: 48 LA62F pha ++000630 a630: a4 1c ldy $1c ++000632 a632: a5 18 lda $18 ++000634 a634: 99 e9 fd sta $fde9,y ++000637 a637: a5 19 lda $19 ++000639 a639: 99 ea fd sta $fdea,y ++00063c a63c: c8 iny ++00063d a63d: c8 iny ++00063e a63e: 84 1c sty $1c ++000640 a640: 68 pla ++000641 a641: 18 clc ++000642 a642: 65 18 adc $18 ++000644 a644: 85 18 sta $18 ++000646 a646: 8d 96 16 sta $1696 ++000649 a649: a8 tay ++00064a a64a: 90 02 bcc LA64E ++00064c a64c: e6 19 inc $19 ++00064e a64e: a5 19 LA64E lda $19 ++000650 a650: 8d 97 16 sta $1697 ++000653 a653: c0 c0 cpy #$c0 ++000655 a655: e9 e4 sbc #$e4 ++000657 a657: 90 03 bcc LA65C ++000659 a659: 4c 08 a2 jmp LA208 ;go print 'bad driver file' + ++00065c a65c: 60 LA65C rts + ++00065d a65d: a5 1a LA65D lda $1a ++00065f a65f: 46 1b lsr $1b ++000661 a661: 6a ror A ++000662 a662: 46 1b lsr $1b ++000664 a664: 6a ror A ++000665 a665: 46 1b lsr $1b ++000667 a667: 6a ror A ++000668 a668: 85 1a sta $1a ++00066a a66a: 60 rts + ++00066b a66b: a5 19 LA66B lda $19 ++00066d a66d: 48 pha ++00066e a66e: 49 f0 eor #$f0 ++000670 a670: c9 14 cmp #$14 ++000672 a672: 90 02 bcc LA676 ++000674 a674: a9 ff lda #$ff ++000676 a676: 85 19 LA676 sta $19 ++000678 a678: a0 0e ldy #$0e ++00067a a67a: bd ed 1e LA67A lda $1eed,x ++00067d a67d: 91 18 sta ($18),y ++00067f a67f: ca dex ++000680 a680: 88 dey ++000681 a681: 10 f7 bpl LA67A ++000683 a683: 68 pla ++000684 a684: 85 19 sta $19 ++000686 a686: a9 0f lda #$0f ++000688 a688: d0 a5 bne LA62F + ++00068a a68a: 38 LA68A sec ++00068b a68b: a5 15 lda $15 ++00068d a68d: e5 13 sbc $13 ++00068f a68f: 85 15 sta $15 ++000691 a691: a5 16 lda $16 ++000693 a693: e5 14 sbc $14 ++000695 a695: 85 16 sta $16 ++000697 a697: a5 09 lda $09 ++000699 a699: 05 0a ora $0a ++00069b a69b: f0 0d beq LA6AA ++00069d a69d: a9 00 lda #$00 ++00069f a69f: 38 sec ++0006a0 a6a0: e5 09 sbc $09 ++0006a2 a6a2: 85 15 sta $15 ++0006a4 a6a4: a5 16 lda $16 ++0006a6 a6a6: e5 0a sbc $0a ++0006a8 a6a8: 85 16 sta $16 ++0006aa a6aa: a5 16 LA6AA lda $16 ++0006ac a6ac: c9 20 cmp #$20 ++0006ae a6ae: b0 13 bcs LA6C3 ++0006b0 a6b0: a9 00 lda #$00 ++0006b2 a6b2: 85 15 sta $15 ++0006b4 a6b4: a9 a0 lda #$a0 ++0006b6 a6b6: 85 16 sta $16 ++0006b8 a6b8: c6 02 dec $02 ++0006ba a6ba: a5 02 lda $02 ++0006bc a6bc: c9 02 cmp #$02 ++0006be a6be: b0 ca bcs LA68A ++0006c0 a6c0: 4c a8 a0 jmp LA0A8 + ++0006c3 a6c3: 60 LA6C3 rts + ++0006c4 a6c4: e6 0e LA6C4 inc $0e ++0006c6 a6c6: a5 0f LA6C6 lda $0f ++0006c8 a6c8: 05 10 ora $10 ++0006ca a6ca: f0 f7 beq LA6C3 ++0006cc a6cc: a0 00 ldy #$00 ++0006ce a6ce: a5 11 lda $11 ++0006d0 a6d0: 18 clc ++0006d1 a6d1: 71 0d adc ($0d),y ++0006d3 a6d3: 85 0b sta $0b ++0006d5 a6d5: c8 iny ++0006d6 a6d6: a5 12 lda $12 ++0006d8 a6d8: 71 0d adc ($0d),y ++0006da a6da: 85 0c sta $0c ++0006dc a6dc: 88 dey ++0006dd a6dd: b1 0b lda ($0b),y ++0006df a6df: 18 clc ++0006e0 a6e0: 65 15 adc $15 ++0006e2 a6e2: 91 0b sta ($0b),y ++0006e4 a6e4: c8 iny ++0006e5 a6e5: b1 0b lda ($0b),y ++0006e7 a6e7: 65 16 adc $16 ++0006e9 a6e9: 91 0b sta ($0b),y ++0006eb a6eb: a5 0f lda $0f ++0006ed a6ed: d0 02 bne LA6F1 ++0006ef a6ef: c6 10 dec $10 ++0006f1 a6f1: c6 0f LA6F1 dec $0f ++0006f3 a6f3: c6 0f dec $0f ++0006f5 a6f5: a5 0d lda $0d ++0006f7 a6f7: 18 clc ++0006f8 a6f8: 69 02 adc #$02 ++0006fa a6fa: 85 0d sta $0d ++0006fc a6fc: 90 c8 bcc LA6C6 ++0006fe a6fe: b0 c4 bcs LA6C4 + + ; Moved to $1900 (-$1fff) ++000700 a700: 08 .dd1 $08 ++000701 a701: 02 .dd1 $02 ++000702 a702: 00 00 00 00+ .fill 5,$00 ++000707 a707: 80 .dd1 $80 ++000708 a708: 00 00 00 00+ .fill 8,$00 + ++000710 a710: 4c 31 19 jmp $1931 + ++000713 a713: 4c 05 1e jmp $1e05 + ++000716 a716: 4c 5e 1e jmp $1e5e + ++000719 a719: 4c 31 19 jmp $1931 + ++00071c a71c: 4c 31 19 jmp $1931 + ++00071f a71f: 4c d1 1e jmp $1ed1 + ++000722 a722: 4c b8 1e jmp $1eb8 + ++000725 a725: 4c 69 1a LA725 jmp $1a69 + ++000728 a728: 4c 5e 1a jmp $1a5e + ++00072b a72b: 4c 31 19 jmp $1931 + ++00072e a72e: 4c 31 19 jmp $1931 + ++000731 a731: a9 20 lda #$20 ++000733 a733: d0 f0 bne LA725 + ++000735 a735: 00 00 00 00+ .fill 75,$00 + ++000780 a780: 4c f0 19 jmp $19f0 + ++000783 a783: 4c 9e 1a jmp $1a9e + ++000786 a786: 4c 21 1b jmp $1b21 + ++000789 a789: 4c b0 19 jmp $19b0 + ++00078c a78c: 00 00 00 00+ .fill 36,$00 + ++0007b0 a7b0: 20 e9 19 jsr $19e9 ++0007b3 a7b3: 20 c5 9c jsr $9cc5 ;disk3 driver entry ++0007b6 a7b6: 4c e3 19 jmp $19e3 + ++0007b9 a7b9: 20 e3 19 jsr $19e3 ++0007bc a7bc: 20 c4 f2 jsr PRENIB16 ++0007bf a7bf: 4c e9 19 jmp $19e9 + ++0007c2 a7c2: 20 e3 19 jsr $19e3 ++0007c5 a7c5: 20 0f f3 jsr POSTNIB16 ++0007c8 a7c8: 4c e9 19 jmp $19e9 + ++0007cb a7cb: 20 e9 19 jsr $19e9 ++0007ce a7ce: 20 f5 9a jsr $9af5 ++0007d1 a7d1: 4c e3 19 jmp $19e3 + ++0007d4 a7d4: 20 e9 19 jsr $19e9 ++0007d7 a7d7: 20 00 9a jsr $9a00 ++0007da a7da: 4c e3 19 jmp $19e3 + ++0007dd a7dd: 20 e9 19 jsr $19e9 ++0007e0 a7e0: 20 bc 9b jsr $9bbc ++0007e3 a7e3: a0 01 ldy #$01 ++0007e5 a7e5: 8c ef ff sty B_REG ++0007e8 a7e8: 60 rts + ++0007e9 a7e9: ac 01 19 ldy $1901 ++0007ec a7ec: 8c ef ff sty B_REG ++0007ef a7ef: 60 rts + ++0007f0 a7f0: 8d 98 16 sta $1698 ++0007f3 a7f3: 8e 99 16 stx $1699 ++0007f6 a7f6: 8c 9a 16 sty $169a ++0007f9 a7f9: 08 php ++0007fa a7fa: 68 pla ++0007fb a7fb: 8d 9b 16 sta $169b ++0007fe a7fe: ba tsx ++0007ff a7ff: 8e 9c 16 stx $169c ++000802 a802: a9 00 LA802 lda #$00 ++000804 a804: 8d d0 ff sta Z_REG ++000807 a807: ad 94 16 lda $1694 ++00080a a80a: 8d ef ff sta B_REG ++00080d a80d: ad df ff lda E_REG ++000810 a810: 09 c4 ora #$c4 ++000812 a812: 8d df ff sta E_REG ++000815 a815: a2 10 ldx #$10 ++000817 a817: 8e 80 c0 stx LC080 ++00081a a81a: 29 be and #$be ++00081c a81c: 8d df ff sta E_REG ++00081f a81f: 8d 92 16 sta $1692 ++000822 a822: 78 sei ++000823 a823: ad fc ff lda $fffc ++000826 a826: ad ef ff LA826 lda B_REG ++000829 a829: 10 28 bpl LA853 ++00082b a82b: ad 92 16 lda $1692 ++00082e a82e: d0 f6 bne LA826 ++000830 a830: a9 18 LA830 lda #$18 ++000832 a832: 8d d0 ff sta Z_REG ++000835 a835: ad df ff lda E_REG ++000838 a838: 09 40 ora #$40 ++00083a a83a: 29 7f and #$7f ++00083c a83c: 8d df ff sta E_REG ++00083f a83f: ad 9b 16 lda $169b ++000842 a842: 48 pha ++000843 a843: ad 98 16 lda $1698 ++000846 a846: ae 99 16 ldx $1699 ++000849 a849: ac 9a 16 ldy $169a ++00084c a84c: 28 plp ++00084d a84d: 20 8f 16 jsr $168f ++000850 a850: 4c f0 19 jmp $19f0 + ++000853 a853: ad fd ff LA853 lda $fffd ++000856 a856: ad 92 16 lda $1692 ++000859 a859: 58 cli ++00085a a85a: d0 a6 bne LA802 ++00085c a85c: f0 d2 beq LA830 + ++00085e a85e: 8d 08 19 sta $1908 ++000861 a861: 68 pla ++000862 a862: 68 pla ++000863 a863: ad 08 19 lda $1908 ++000866 a866: c9 01 cmp #$01 ++000868 a868: 60 rts + ++000869 a869: 8d 08 19 sta $1908 ++00086c a86c: a0 77 ldy #$77 ++00086e a86e: 8c df ff sty E_REG ++000871 a871: 2c 40 c0 bit LC040 ++000874 a874: 48 pha ++000875 a875: 4a lsr A ++000876 a876: 4a lsr A ++000877 a877: 4a lsr A ++000878 a878: 4a lsr A ++000879 a879: a0 00 ldy #$00 ++00087b a87b: 20 8f 1a jsr $1a8f ++00087e a87e: 68 pla ++00087f a87f: 20 8f 1a jsr $1a8f ++000882 a882: a9 53 lda #$53 ++000884 a884: 8d ba 05 sta $05ba ++000887 a887: a9 44 lda #$44 ++000889 a889: 8d bb 05 sta $05bb ++00088c a88c: 4c 8c 1a jmp $1a8c + ++00088f a88f: 29 0f and #$0f ++000891 a891: 09 30 ora #$30 ++000893 a893: c9 3a cmp #$3a ++000895 a895: 90 02 bcc LA899 ++000897 a897: 69 06 adc #$06 ++000899 a899: 99 bc 05 LA899 sta $05bc,y ++00089c a89c: c8 iny ++00089d a89d: 60 rts + ++00089e a89e: a9 77 lda #$77 ++0008a0 a8a0: 8d df ff sta E_REG ++0008a3 a8a3: a9 01 lda #$01 ++0008a5 a8a5: 8d 00 c0 sta LC000 ++0008a8 a8a8: 4c f0 19 jmp $19f0 + ++0008ab a8ab: 00 00 00 00+ .fill 75,$00 ++0008f6 a8f6: 80 80 80 80+ .fill 16,$80 + ++000906 a906: 20 82 1b jsr $1b82 ++000909 a909: ad a1 16 lda $16a1 ++00090c a90c: aa tax ++00090d a90d: 0a asl A ++00090e a90e: 0a asl A ++00090f a90f: 85 ba sta $ba ++000911 a911: ad 4d fe lda $fe4d ++000914 a914: 2a rol A ++000915 a915: 2a rol A ++000916 a916: 6a LA916 ror A ++000917 a917: 6a ror A ++000918 a918: ca dex ++000919 a919: 10 fb bpl LA916 ++00091b a91b: 20 d3 1b jsr $1bd3 ++00091e a91e: 4c 24 1b jmp $1b24 + ++000921 a921: ac a1 16 ldy $16a1 ++000924 a924: ae a0 16 ldx $16a0 ++000927 a927: 86 c0 stx $c0 ++000929 a929: a9 00 lda #$00 ++00092b a92b: 8d 08 19 sta $1908 ++00092e a92e: b9 f6 1a lda $1af6,y ++000931 a931: 18 clc ++000932 a932: 30 33 bmi LA967 ++000934 a934: 85 c1 sta $c1 ++000936 a936: a2 05 ldx #$05 ++000938 a938: bd a2 16 LA938 lda $16a2,x ++00093b a93b: 95 c2 sta $c2,x ++00093d a93d: ca dex ++00093e a93e: 10 f8 bpl LA938 ++000940 a940: ad ef ff lda B_REG ++000943 a943: 48 pha ++000944 a944: 20 68 1b jsr $1b68 ++000947 a947: ad df ff lda E_REG ++00094a a94a: 29 bf and #$bf ++00094c a94c: 8d df ff sta E_REG ++00094f a94f: a2 01 ldx #$01 ++000951 a951: b5 c3 LA951 lda $c3,x ++000953 a953: 9d a3 16 sta $16a3,x ++000956 a956: b5 c8 lda $c8,x ++000958 a958: 9d a8 16 sta $16a8,x ++00095b a95b: ca dex ++00095c a95c: 10 f3 bpl LA951 ++00095e a95e: 68 pla ++00095f a95f: 8d ef ff sta B_REG ++000962 a962: ad 08 19 lda $1908 ++000965 a965: c9 01 cmp #$01 ++000967 a967: 60 LA967 rts + ++000968 a968: b9 e6 1a lda $1ae6,y ++00096b a96b: 8d ef ff sta B_REG ++00096e a96e: b9 d7 1a lda $1ad7,y ++000971 a971: 48 pha ++000972 a972: b9 c8 1a lda $1ac8,y ++000975 a975: 48 pha ++000976 a976: ad df ff lda E_REG ++000979 a979: 09 40 ora #$40 ++00097b a97b: 8d df ff sta E_REG ++00097e a97e: 60 rts + ++00097f a97f: 20 09 1b jsr $1b09 ++000982 a982: ad 03 20 lda $2003 ++000985 a985: cd 4d fe cmp $fe4d ++000988 a988: f0 48 beq LA9D2 ++00098a a98a: 85 b9 sta $b9 ++00098c a98c: ac 4d fe ldy $fe4d ++00098f a98f: 84 b8 sty $b8 ++000991 a991: 8d 4d fe sta $fe4d ++000994 a994: a9 00 lda #$00 ++000996 a996: 85 ba LA996 sta $ba ++000998 a998: a5 b9 lda $b9 ++00099a a99a: 20 d3 1b jsr $1bd3 ++00099d a99d: 84 bb sty $bb ++00099f a99f: a5 b8 lda $b8 ++0009a1 a9a1: 20 d3 1b jsr $1bd3 ++0009a4 a9a4: c4 bb cpy $bb ++0009a6 a9a6: f0 19 beq LA9C1 ++0009a8 a9a8: aa tax ++0009a9 a9a9: de c8 16 dec $16c8,x ++0009ac a9ac: 10 05 bpl LA9B3 ++0009ae a9ae: a2 07 ldx #$07 ++0009b0 a9b0: 20 27 1b jsr $1b27 ++0009b3 a9b3: a5 bb LA9B3 lda $bb ++0009b5 a9b5: aa tax ++0009b6 a9b6: fe c8 16 inc $16c8,x ++0009b9 a9b9: d0 06 bne LA9C1 ++0009bb a9bb: a8 tay ++0009bc a9bc: a2 06 ldx #$06 ++0009be a9be: 20 27 1b jsr $1b27 ++0009c1 a9c1: 46 b9 LA9C1 lsr $b9 ++0009c3 a9c3: 46 b9 lsr $b9 ++0009c5 a9c5: 46 b8 lsr $b8 ++0009c7 a9c7: 46 b8 lsr $b8 ++0009c9 a9c9: a5 ba lda $ba ++0009cb a9cb: 18 clc ++0009cc a9cc: 69 04 adc #$04 ++0009ce a9ce: c9 10 cmp #$10 ++0009d0 a9d0: d0 c4 bne LA996 ++0009d2 a9d2: 60 LA9D2 rts + ++0009d3 a9d3: 29 03 and #$03 ++0009d5 a9d5: 05 ba ora $ba ++0009d7 a9d7: a8 tay ++0009d8 a9d8: b9 b0 16 lda $16b0,y ++0009db a9db: a8 tay ++0009dc a9dc: 60 rts + ++0009dd a9dd: e0 14 cpx #$14 ++0009df a9df: b0 0a bcs LA9EB ++0009e1 a9e1: bc b0 16 ldy $16b0,x ++0009e4 a9e4: 30 07 bmi LA9ED ++0009e6 a9e6: b9 f6 1a lda $1af6,y ++0009e9 a9e9: 10 06 bpl LA9F1 ++0009eb a9eb: a0 00 LA9EB ldy #$00 ++0009ed a9ed: 8c e0 16 LA9ED sty $16e0 ++0009f0 a9f0: 60 rts + ++0009f1 a9f1: b9 aa 1a LA9F1 lda $1aaa,y ++0009f4 a9f4: 85 d0 sta $d0 ++0009f6 a9f6: b9 b9 1a lda $1ab9,y ++0009f9 a9f9: 85 d1 sta $d1 ++0009fb a9fb: b9 e6 1a lda $1ae6,y ++0009fe a9fe: 8d ef ff sta B_REG ++000a01 aa01: a0 1b ldy #$1b ++000a03 aa03: b1 d0 LAA03 lda ($d0),y ++000a05 aa05: 99 e0 16 sta $16e0,y ++000a08 aa08: 88 dey ++000a09 aa09: 10 f8 bpl LAA03 ++000a0b aa0b: 60 rts + ++000a0c aa0c: f8 .dd1 $f8 ++000a0d aa0d: 00 00 00 00+ .fill 11,$00 ++000a18 aa18: 80 .dd1 $80 ++000a19 aa19: 00 00 00 00+ .fill 90,$00 + ++000a73 aa73: 48 pha ++000a74 aa74: 8a txa ++000a75 aa75: 48 pha ++000a76 aa76: 98 tya ++000a77 aa77: 48 pha ++000a78 aa78: ba tsx ++000a79 aa79: e0 fa cpx #$fa ++000a7b aa7b: 90 05 bcc LAA82 ++000a7d aa7d: a9 06 lda #$06 ++000a7f aa7f: 20 69 1a jsr $1a69 ++000a82 aa82: bc 04 01 LAA82 ldy $0104,x ++000a85 aa85: d8 cld ++000a86 aa86: ad df ff lda E_REG ++000a89 aa89: aa tax ++000a8a aa8a: 29 30 and #$30 ++000a8c aa8c: 09 44 ora #$44 ++000a8e aa8e: 8d df ff sta E_REG ++000a91 aa91: 8a txa ++000a92 aa92: 48 pha ++000a93 aa93: ad d0 ff lda Z_REG ++000a96 aa96: 48 pha ++000a97 aa97: ad ef ff lda B_REG ++000a9a aa9a: 48 pha ++000a9b aa9b: ad 0d 1c lda $1c0d ++000a9e aa9e: 48 pha ++000a9f aa9f: 2c ff cf bit LCFFF ++000aa2 aaa2: 2c 20 c0 bit LC020 ++000aa5 aaa5: a9 00 lda #$00 ++000aa7 aaa7: 8d 0d 1c sta $1c0d ++000aaa aaaa: 98 tya ++000aab aaab: 29 10 and #$10 ++000aad aaad: f0 05 beq LAAB4 ++000aaf aaaf: a9 01 lda #$01 ++000ab1 aab1: 20 69 1a jsr $1a69 ++000ab4 aab4: 2c ef ff LAAB4 bit B_REG ++000ab7 aab7: 10 03 bpl LAABC ++000ab9 aab9: 4c 8e 1d jmp $1d8e + ++000abc aabc: a9 00 LAABC lda #$00 ++000abe aabe: 8d d0 ff sta Z_REG ++000ac1 aac1: ad df ff lda E_REG ++000ac4 aac4: 09 80 ora #$80 ++000ac6 aac6: 8d df ff sta E_REG ++000ac9 aac9: 29 7f and #$7f ++000acb aacb: a2 01 ldx #$01 ++000acd aacd: ac f1 c0 ldy LC0F1 ++000ad0 aad0: 8d df ff sta E_REG ++000ad3 aad3: 30 59 bmi LAB2E ++000ad5 aad5: ad ed ff lda E_IFR ++000ad8 aad8: 10 10 bpl LAAEA ++000ada aada: 2d ee ff and E_IER ++000add aadd: a0 07 ldy #$07 ++000adf aadf: a2 02 ldx #$02 ++000ae1 aae1: 4a LAAE1 lsr A ++000ae2 aae2: b0 4a bcs LAB2E ++000ae4 aae4: e8 inx ++000ae5 aae5: 88 dey ++000ae6 aae6: d0 f9 bne LAAE1 ++000ae8 aae8: f0 18 beq LAB02 + ++000aea aaea: ad dd ff LAAEA lda D_IFR ++000aed aaed: 10 13 bpl LAB02 ++000aef aaef: 2d de ff and D_IER ++000af2 aaf2: 2c 73 1d bit $1d73 ++000af5 aaf5: d0 0f bne LAB06 ++000af7 aaf7: a0 07 ldy #$07 ++000af9 aaf9: a2 09 ldx #$09 ++000afb aafb: 4a LAAFB lsr A ++000afc aafc: b0 30 bcs LAB2E ++000afe aafe: e8 inx ++000aff aaff: 88 dey ++000b00 ab00: d0 f9 bne LAAFB ++000b02 ab02: a2 10 LAB02 ldx #$10 ++000b04 ab04: d0 1e bne LAB24 + ++000b06 ab06: a2 11 LAB06 ldx #$11 ++000b08 ab08: 2c 65 c0 bit LC065 ++000b0b ab0b: 10 21 bpl LAB2E ++000b0d ab0d: e8 inx ++000b0e ab0e: 2c 64 c0 bit LC064 ++000b11 ab11: 10 1b bpl LAB2E ++000b13 ab13: ad ef ff lda B_REG ++000b16 ab16: e8 inx ++000b17 ab17: 2c a5 1d bit $1da5 ++000b1a ab1a: f0 12 beq LAB2E ++000b1c ab1c: e8 inx ++000b1d ab1d: 2c ac 1c bit $1cac ++000b20 ab20: f0 0c beq LAB2E ++000b22 ab22: a2 0a ldx #$0a ++000b24 ab24: a9 02 LAB24 lda #$02 ++000b26 ab26: 20 69 1a jsr $1a69 ++000b29 ab29: a9 03 LAB29 lda #$03 ++000b2b ab2b: 20 69 1a jsr $1a69 ++000b2e ab2e: bd 0e 1c LAB2E lda $1c0e,x ++000b31 ab31: 10 f1 bpl LAB24 ++000b33 ab33: e0 02 cpx #$02 ++000b35 ab35: d0 03 bne LAB3A ++000b37 ab37: 8e 95 16 stx $1695 ++000b3a ab3a: bd 26 1c LAB3A lda $1c26,x ++000b3d ab3d: 85 fd sta $fd ++000b3f ab3f: 1d 3e 1c ora $1c3e,x ++000b42 ab42: f0 e0 beq LAB24 ++000b44 ab44: bd 3e 1c lda $1c3e,x ++000b47 ab47: 85 fe sta $fe ++000b49 ab49: bd 56 1c lda $1c56,x ++000b4c ab4c: 8d ef ff sta B_REG ++000b4f ab4f: ad 0c 1c lda $1c0c ++000b52 ab52: c9 48 cmp #$48 ++000b54 ab54: 90 d3 bcc LAB29 ++000b56 ab56: e9 20 sbc #$20 ++000b58 ab58: 8d 0c 1c sta $1c0c ++000b5b ab5b: 85 ff sta $ff ++000b5d ab5d: aa tax ++000b5e ab5e: 20 7a 1d jsr $1d7a ++000b61 ab61: 78 sei ++000b62 ab62: a9 00 lda #$00 ++000b64 ab64: 8d d0 ff sta Z_REG ++000b67 ab67: 18 clc ++000b68 ab68: ad 0c 1c lda $1c0c ++000b6b ab6b: 69 20 adc #$20 ++000b6d ab6d: 8d 0c 1c sta $1c0c ++000b70 ab70: 85 ff sta $ff ++000b72 ab72: a9 02 lda #$02 ++000b74 ab74: 8d dd ff sta D_IFR ++000b77 ab77: 4c 8e 1d jmp $1d8e + ++000b7a ab7a: 6c fd 00 jmp ($00fd) + ++000b7d ab7d: 48 pha ++000b7e ab7e: ad 92 16 lda $1692 ++000b81 ab81: d0 02 bne LAB85 ++000b83 ab83: 68 pla ++000b84 ab84: 40 rti + ++000b85 ab85: 68 LAB85 pla ++000b86 ab86: ad fd ff lda $fffd ++000b89 ab89: a9 21 lda #$21 ++000b8b ab8b: 20 69 1a jsr $1a69 ++000b8e ab8e: 78 sei ++000b8f ab8f: ad df ff lda E_REG ++000b92 ab92: 09 40 ora #$40 ++000b94 ab94: 8d df ff sta E_REG ++000b97 ab97: 68 pla ++000b98 ab98: 20 b8 1e jsr $1eb8 ++000b9b ab9b: 68 pla ++000b9c ab9c: 8d ef ff sta B_REG ++000b9f ab9f: 68 pla ++000ba0 aba0: 8d d0 ff sta Z_REG ++000ba3 aba3: 68 pla ++000ba4 aba4: 09 20 ora #$20 ++000ba6 aba6: 2c 06 19 bit $1906 ++000ba9 aba9: 30 02 bmi LABAD ++000bab abab: 29 df and #$df ++000bad abad: 8d df ff LABAD sta E_REG ++000bb0 abb0: ae 6e 1c ldx $1c6e ++000bb3 abb3: f0 2b beq LABE0 ++000bb5 abb5: ad df ff lda E_REG ++000bb8 abb8: 48 pha ++000bb9 abb9: ad d0 ff lda Z_REG ++000bbc abbc: 48 pha ++000bbd abbd: ad ef ff lda B_REG ++000bc0 abc0: 48 pha ++000bc1 abc1: 8a txa ++000bc2 abc2: 48 pha ++000bc3 abc3: 20 e6 1d jsr $1de6 ++000bc6 abc6: 78 sei ++000bc7 abc7: 68 pla ++000bc8 abc8: 68 pla ++000bc9 abc9: 8d ef ff sta B_REG ++000bcc abcc: 68 pla ++000bcd abcd: 8d d0 ff sta Z_REG ++000bd0 abd0: 68 pla ++000bd1 abd1: 09 20 ora #$20 ++000bd3 abd3: 2c 06 19 bit $1906 ++000bd6 abd6: 30 02 bmi LABDA ++000bd8 abd8: 29 df and #$df ++000bda abda: 8d df ff LABDA sta E_REG ++000bdd abdd: 4c b0 1d jmp $1db0 + ++000be0 abe0: 68 LABE0 pla ++000be1 abe1: a8 tay ++000be2 abe2: 68 pla ++000be3 abe3: aa tax ++000be4 abe4: 68 pla ++000be5 abe5: 40 rti + ++000be6 abe6: a2 00 ldx #$00 ++000be8 abe8: 8e 6e 1c stx $1c6e ++000beb abeb: ad 72 1c lda $1c72 ++000bee abee: 8d ef ff sta B_REG ++000bf1 abf1: ad 71 1c lda $1c71 ++000bf4 abf4: 48 pha ++000bf5 abf5: ad 70 1c lda $1c70 ++000bf8 abf8: 48 pha ++000bf9 abf9: ac 6f 1c ldy $1c6f ++000bfc abfc: 08 php ++000bfd abfd: 68 pla ++000bfe abfe: 29 82 and #$82 ++000c00 ac00: 48 pha ++000c01 ac01: 98 tya ++000c02 ac02: 40 rti + ++000c03 ac03: 81 00 sta ($00,x) ++000c05 ac05: 08 php ++000c06 ac06: 20 99 1e jsr $1e99 ++000c09 ac09: 48 pha ++000c0a ac0a: 8a txa ++000c0b ac0b: 48 pha ++000c0c ac0c: b1 f9 LAC0C lda ($f9),y ++000c0e ac0e: c9 18 cmp #$18 ++000c10 ac10: aa tax ++000c11 ac11: b0 33 bcs LAC46 ++000c13 ac13: bd 0e 1c lda $1c0e,x ++000c16 ac16: 30 2e bmi LAC46 ++000c18 ac18: ad 03 1e lda $1e03 ++000c1b ac1b: 9d 0e 1c sta $1c0e,x ++000c1e ac1e: c8 iny ++000c1f ac1f: 91 f9 sta ($f9),y ++000c21 ac21: c8 iny ++000c22 ac22: b1 f9 lda ($f9),y ++000c24 ac24: 9d 26 1c sta $1c26,x ++000c27 ac27: c8 iny ++000c28 ac28: b1 f9 lda ($f9),y ++000c2a ac2a: 9d 3e 1c sta $1c3e,x ++000c2d ac2d: c8 iny ++000c2e ac2e: b1 f9 lda ($f9),y ++000c30 ac30: 9d 56 1c sta $1c56,x ++000c33 ac33: c8 iny ++000c34 ac34: cc 04 1e cpy $1e04 ++000c37 ac37: 90 d3 bcc LAC0C ++000c39 ac39: 18 clc ++000c3a ac3a: ee 03 1e inc $1e03 ++000c3d ac3d: 30 0f bmi LAC4E ++000c3f ac3f: a9 81 lda #$81 ++000c41 ac41: 8d 03 1e sta $1e03 ++000c44 ac44: 30 08 bmi LAC4E + ++000c46 ac46: 8a LAC46 txa ++000c47 ac47: 48 pha ++000c48 ac48: 20 84 1e jsr $1e84 ++000c4b ac4b: 68 pla ++000c4c ac4c: aa tax ++000c4d ac4d: 38 LAC4D sec ++000c4e ac4e: 68 LAC4E pla ++000c4f ac4f: 8d df ff sta E_REG ++000c52 ac52: 68 pla ++000c53 ac53: 8d d0 ff sta Z_REG ++000c56 ac56: b0 03 bcs LAC5B ++000c58 ac58: 28 plp ++000c59 ac59: 18 clc ++000c5a ac5a: 60 rts + ++000c5b ac5b: 28 LAC5B plp ++000c5c ac5c: 38 sec ++000c5d ac5d: 60 rts + ++000c5e ac5e: 08 php ++000c5f ac5f: 20 99 1e jsr $1e99 ++000c62 ac62: 48 pha ++000c63 ac63: 8a txa ++000c64 ac64: 48 pha ++000c65 ac65: b1 f9 LAC65 lda ($f9),y ++000c67 ac67: aa tax ++000c68 ac68: e0 18 cpx #$18 ++000c6a ac6a: b0 e1 bcs LAC4D ++000c6c ac6c: c8 iny ++000c6d ac6d: bd 0e 1c lda $1c0e,x ++000c70 ac70: 10 db bpl LAC4D ++000c72 ac72: d1 f9 cmp ($f9),y ++000c74 ac74: d0 d7 bne LAC4D ++000c76 ac76: c8 iny ++000c77 ac77: c8 iny ++000c78 ac78: c8 iny ++000c79 ac79: c8 iny ++000c7a ac7a: cc 04 1e cpy $1e04 ++000c7d ac7d: 90 e6 bcc LAC65 ++000c7f ac7f: 20 84 1e jsr $1e84 ++000c82 ac82: 90 c9 bcc LAC4D ++000c84 ac84: ac 04 1e ldy $1e04 ++000c87 ac87: 38 LAC87 sec ++000c88 ac88: 98 tya ++000c89 ac89: e9 05 sbc #$05 ++000c8b ac8b: a8 tay ++000c8c ac8c: 90 0a bcc LAC98 ++000c8e ac8e: b1 f9 lda ($f9),y ++000c90 ac90: aa tax ++000c91 ac91: a9 00 lda #$00 ++000c93 ac93: 9d 0e 1c sta $1c0e,x ++000c96 ac96: f0 ef beq LAC87 + ++000c98 ac98: 60 LAC98 rts + ++000c99 ac99: 78 sei ++000c9a ac9a: 8d 04 1e sta $1e04 ++000c9d ac9d: ad d0 ff lda Z_REG ++000ca0 aca0: 48 pha ++000ca1 aca1: a9 00 lda #$00 ++000ca3 aca3: 8d d0 ff sta Z_REG ++000ca6 aca6: 86 f9 stx $f9 ++000ca8 aca8: 84 fa sty $fa ++000caa acaa: a8 tay ++000cab acab: ad df ff lda E_REG ++000cae acae: aa tax ++000caf acaf: 09 04 ora #$04 ++000cb1 acb1: 29 f7 and #$f7 ++000cb3 acb3: 8d df ff sta E_REG ++000cb6 acb6: 68 pla ++000cb7 acb7: 60 rts + ++000cb8 acb8: c9 05 cmp #$05 ++000cba acba: b0 14 bcs LACD0 ++000cbc acbc: 08 php ++000cbd acbd: 78 sei ++000cbe acbe: 8d 0d 1c sta $1c0d ++000cc1 acc1: 09 c0 ora #$c0 ++000cc3 acc3: 8d ce 1e sta $1ece ++000cc6 acc6: 2c ff cf bit LCFFF ++000cc9 acc9: 2c 20 c0 bit LC020 ++000ccc accc: 2c 00 c0 bit LC000 ++000ccf accf: 28 plp ++000cd0 acd0: 60 LACD0 rts + ++000cd1 acd1: 08 php ++000cd2 acd2: 78 sei ++000cd3 acd3: ad 6e 1c lda $1c6e ++000cd6 acd6: d0 10 bne LACE8 ++000cd8 acd8: 86 fb stx $fb ++000cda acda: 84 fc sty $fc ++000cdc acdc: a0 05 ldy #$05 ++000cde acde: b1 fb LACDE lda ($fb),y ++000ce0 ace0: 99 6e 1c sta $1c6e,y ++000ce3 ace3: 88 dey ++000ce4 ace4: 10 f8 bpl LACDE ++000ce6 ace6: 28 plp ++000ce7 ace7: 60 rts + ++000ce8 ace8: a9 05 LACE8 lda #$05 ++000cea acea: 20 69 1a jsr $1a69 ++000ced aced: 40 rti + ++000cee acee: 00 .dd1 $00 ++000cef acef: 05 .dd1 $05 ++000cf0 acf0: 1f .dd1 $1f ++000cf1 acf1: 00 00 00 00+ .fill 9,$00 ++000cfa acfa: 01 .dd1 $01 ++000cfb acfb: 00 .dd1 $00 ++000cfc acfc: bb .dd1 $bb ++000cfd acfd: 02 .dd1 $02 ++000cfe acfe: e5 .dd1 $e5 ++000cff acff: d5 .dd1 $d5 ++000d00 ad00: 08 .dd1 $08 ++000d01 ad01: 2e 43 4f 4e+ .str “.CONSOLE” ++000d09 ad09: 00 00 00 00+ .fill 7,$00 ++000d10 ad10: 08 .dd1 $08 ++000d11 ad11: 2e 50 52 49+ .str “.PRINTER” ++000d19 ad19: 00 00 00 00+ .fill 7,$00 ++000d20 ad20: 0a 2e 53 49+ .str $0a,“.SILENTYPE” ++000d2b ad2b: 00 00 00 00+ .fill 133,$00 ++000db0 adb0: 80 80 80 80+ .fill 16,$80 ++000dc0 adc0: 81 81 81 81+ .fill 16,$81 ++000dd0 add0: 82 82 82 82+ .fill 16,$82 ++000de0 ade0: 83 83 83 83+ .fill 16,$83 ++000df0 adf0: 00 .dd1 $00 ++000df1 adf1: 01 01 01 01+ .fill 11,$01 ++000dfc adfc: 02 .dd1 $02 ++000dfd adfd: 03 .dd1 $03 ++000dfe adfe: 02 .dd1 $02 ++000dff adff: 03 .dd1 $03 + + ; + ; ++000e00 ae00: 20 ec 9a jsr $9aec ++000e03 ae03: a2 00 ldx #$00 ++000e05 ae05: a0 12 ldy #$12 ++000e07 ae07: a9 30 lda #$30 ++000e09 ae09: d0 04 bne LAE0F + ++000e0b ae0b: e8 LAE0B inx ++000e0c ae0c: b9 e0 16 lda $16e0,y ++000e0f ae0f: 29 0f LAE0F and #$0f ++000e11 ae11: 9d b1 9b sta $9bb1,x ++000e14 ae14: 88 dey ++000e15 ae15: c0 07 cpy #$07 ++000e17 ae17: f0 f2 beq LAE0B ++000e19 ae19: b9 e0 16 lda $16e0,y ++000e1c ae1c: 0a asl A ++000e1d ae1d: 0a asl A ++000e1e ae1e: 0a asl A ++000e1f ae1f: 0a asl A ++000e20 ae20: 1d b1 9b ora $9bb1,x ++000e23 ae23: 9d b1 9b sta $9bb1,x ++000e26 ae26: 88 dey ++000e27 ae27: 10 e2 bpl LAE0B ++000e29 ae29: ad b8 9b lda $9bb8 ++000e2c ae2c: 20 8d 9b jsr $9b8d ++000e2f ae2f: aa tax ++000e30 ae30: ad b9 9b lda $9bb9 ++000e33 ae33: 20 8d 9b jsr $9b8d ++000e36 ae36: a8 tay ++000e37 ae37: 4a lsr A ++000e38 ae38: 4a lsr A ++000e39 ae39: 85 d2 sta $d2 ++000e3b ae3b: 98 tya ++000e3c ae3c: 29 03 and #$03 ++000e3e ae3e: d0 05 bne LAE45 ++000e40 ae40: e0 03 cpx #$03 ++000e42 ae42: 90 01 bcc LAE45 ++000e44 ae44: 88 dey ++000e45 ae45: 18 LAE45 clc ++000e46 ae46: 98 tya ++000e47 ae47: 65 d2 adc $d2 ++000e49 ae49: 7d a4 9b adc $9ba4,x ++000e4c ae4c: 85 d2 sta $d2 ++000e4e ae4e: ad b7 9b lda $9bb7 ++000e51 ae51: 20 8d 9b jsr $9b8d ++000e54 ae54: 18 clc ++000e55 ae55: 65 d2 adc $d2 ++000e57 ae57: 38 sec ++000e58 ae58: e9 07 LAE58 sbc #$07 ++000e5a ae5a: c9 08 cmp #$08 ++000e5c ae5c: b0 fa bcs LAE58 ++000e5e ae5e: 8d b6 9b sta $9bb6 ++000e61 ae61: a9 d0 lda #$d0 ++000e63 ae63: 85 d0 sta $d0 ++000e65 ae65: a9 ff lda #$ff ++000e67 ae67: 85 d1 sta $d1 ++000e69 ae69: a9 8f lda #$8f ++000e6b ae6b: 8d d1 14 sta $14d1 ++000e6e ae6e: a9 a5 lda #$a5 ++000e70 ae70: 85 d3 sta $d3 ++000e72 ae72: a0 00 ldy #$00 ++000e74 ae74: b9 b1 9b LAE74 lda $9bb1,y ++000e77 ae77: 91 d0 sta ($d0),y ++000e79 ae79: 45 d3 eor $d3 ++000e7b ae7b: 85 d3 sta $d3 ++000e7d ae7d: c8 iny ++000e7e ae7e: c0 0a cpy #$0a ++000e80 ae80: 90 f2 bcc LAE74 ++000e82 ae82: 91 d0 sta ($d0),y ++000e84 ae84: ad d0 ff lda Z_REG ++000e87 ae87: 48 pha ++000e88 ae88: ad df ff lda E_REG ++000e8b ae8b: 48 pha ++000e8c ae8c: 09 80 ora #$80 ++000e8e ae8e: 8d df ff sta E_REG ++000e91 ae91: a0 14 ldy #$14 ++000e93 ae93: 8c d0 ff sty Z_REG ++000e96 ae96: ad 70 c0 lda LC070 ++000e99 ae99: 30 48 bmi LAEE3 ++000e9b ae9b: a2 12 ldx #$12 ++000e9d ae9d: 8e d0 ff stx Z_REG ++000ea0 aea0: a9 ff lda #$ff ++000ea2 aea2: 8d 70 c0 sta LC070 ++000ea5 aea5: 8d 70 c0 sta LC070 ++000ea8 aea8: a2 01 ldx #$01 ++000eaa aeaa: e8 LAEAA inx ++000eab aeab: 08 php ++000eac aeac: 78 sei ++000ead aead: 8e d0 ff LAEAD stx Z_REG ++000eb0 aeb0: ad 70 c0 lda LC070 ++000eb3 aeb3: bd b1 9b lda $9bb1,x ++000eb6 aeb6: 8d 70 c0 sta LC070 ++000eb9 aeb9: ad 70 c0 lda LC070 ++000ebc aebc: 8c d0 ff sty Z_REG ++000ebf aebf: ad 70 c0 lda LC070 ++000ec2 aec2: d0 e9 bne LAEAD ++000ec4 aec4: 28 plp ++000ec5 aec5: e0 07 cpx #$07 ++000ec7 aec7: 90 e1 bcc LAEAA ++000ec9 aec9: a2 0e ldx #$0e ++000ecb aecb: 8e d0 ff stx Z_REG ++000ece aece: ad b9 9b lda $9bb9 ++000ed1 aed1: 09 cc ora #$cc ++000ed3 aed3: 8d 70 c0 sta LC070 ++000ed6 aed6: ee d0 ff inc Z_REG ++000ed9 aed9: ad b9 9b lda $9bb9 ++000edc aedc: 4a lsr A ++000edd aedd: 4a lsr A ++000ede aede: 09 cc ora #$cc ++000ee0 aee0: 8d 70 c0 sta LC070 ++000ee3 aee3: 68 LAEE3 pla ++000ee4 aee4: 8d df ff sta E_REG ++000ee7 aee7: 68 pla ++000ee8 aee8: 8d d0 ff sta Z_REG ++000eeb aeeb: 60 rts + ++000eec aeec: ad df ff lda E_REG ++000eef aeef: 09 40 ora #$40 ++000ef1 aef1: 8d df ff sta E_REG ++000ef4 aef4: 60 rts + ++000ef5 aef5: 20 ec 9a jsr $9aec ++000ef8 aef8: ad d0 ff lda Z_REG ++000efb aefb: 48 pha ++000efc aefc: ad df ff lda E_REG ++000eff aeff: 48 pha ++000f00 af00: 09 80 ora #$80 ++000f02 af02: 8d df ff sta E_REG ++000f05 af05: a9 00 lda #$00 ++000f07 af07: 8d e0 16 sta $16e0 ++000f0a af0a: a0 14 ldy #$14 ++000f0c af0c: 8c d0 ff sty Z_REG ++000f0f af0f: ad 70 c0 lda LC070 ++000f12 af12: 30 70 bmi LAF84 ++000f14 af14: a9 10 lda #$10 ++000f16 af16: 8d bb 9b sta $9bbb ++000f19 af19: a2 08 LAF19 ldx #$08 ++000f1b af1b: 08 php ++000f1c af1c: 78 sei ++000f1d af1d: ca LAF1D dex ++000f1e af1e: 30 19 bmi LAF39 ++000f20 af20: 8e d0 ff stx Z_REG ++000f23 af23: ad 70 c0 lda LC070 ++000f26 af26: 9d d4 18 sta $18d4,x ++000f29 af29: 8c d0 ff sty Z_REG ++000f2c af2c: ad 70 c0 lda LC070 ++000f2f af2f: f0 ec beq LAF1D ++000f31 af31: 28 plp ++000f32 af32: ce bb 9b dec $9bbb ++000f35 af35: 10 e2 bpl LAF19 ++000f37 af37: 30 4b bmi LAF84 + ++000f39 af39: 28 LAF39 plp ++000f3a af3a: a2 0f ldx #$0f ++000f3c af3c: 8e d0 ff stx Z_REG ++000f3f af3f: ad 70 c0 lda LC070 ++000f42 af42: 38 sec ++000f43 af43: 2a rol A ++000f44 af44: 2a rol A ++000f45 af45: ce d0 ff dec Z_REG ++000f48 af48: 2d 70 c0 and LC070 ++000f4b af4b: 8d dc 18 sta $18dc ++000f4e af4e: a2 09 ldx #$09 ++000f50 af50: bd d4 18 LAF50 lda $18d4,x ++000f53 af53: 9d b1 9b sta $9bb1,x ++000f56 af56: ca dex ++000f57 af57: 10 f7 bpl LAF50 ++000f59 af59: a9 19 lda #$19 ++000f5b af5b: 8d ba 9b sta $9bba ++000f5e af5e: a0 11 ldy #$11 ++000f60 af60: a2 00 ldx #$00 ++000f62 af62: bd b1 9b LAF62 lda $9bb1,x ++000f65 af65: 4a lsr A ++000f66 af66: 4a lsr A ++000f67 af67: 4a lsr A ++000f68 af68: 4a lsr A ++000f69 af69: 09 30 ora #$30 ++000f6b af6b: 99 e0 16 sta $16e0,y ++000f6e af6e: e8 inx ++000f6f af6f: 88 dey ++000f70 af70: 30 12 bmi LAF84 ++000f72 af72: bd b1 9b LAF72 lda $9bb1,x ++000f75 af75: 29 0f and #$0f ++000f77 af77: 09 30 ora #$30 ++000f79 af79: 99 e0 16 sta $16e0,y ++000f7c af7c: 88 dey ++000f7d af7d: c0 07 cpy #$07 ++000f7f af7f: d0 e1 bne LAF62 ++000f81 af81: e8 inx ++000f82 af82: d0 ee bne LAF72 ++000f84 af84: 68 LAF84 pla ++000f85 af85: 8d df ff sta E_REG ++000f88 af88: 68 pla ++000f89 af89: 8d d0 ff sta Z_REG ++000f8c af8c: 60 rts + ++000f8d af8d: 48 4a 4a 4a+ .str “HJJJJ” + ++000f92 af92: a8 tay ++000f93 af93: 68 pla ++000f94 af94: 29 0f and #$0f ++000f96 af96: 18 clc ++000f97 af97: 79 9b 9b adc $9b9b,y ++000f9a af9a: 60 rts + ++000f9b af9b: 00 .dd1 $00 ++000f9c af9c: 0a .dd1 $0a ++000f9d af9d: 14 .dd1 $14 ++000f9e af9e: 1e .dd1 $1e ++000f9f af9f: 28 32 3c 46+ .str “(2HM” ++0021bd c1bd: 7f .dd1 $7f ++0021be c1be: d1 .dd1 $d1 ++0021bf c1bf: d0 .dd1 $d0 ++0021c0 c1c0: cd .dd1 $cd ++0021c1 c1c1: 2c .dd1 $2c ++0021c2 c1c2: d1 .dd1 $d1 ++0021c3 c1c3: c9 .dd1 $c9 ++0021c4 c1c4: 77 .dd1 $77 ++0021c5 c1c5: c9 .dd1 $c9 ++0021c6 c1c6: cd .dd1 $cd ++0021c7 c1c7: 9c .dd1 $9c ++0021c8 c1c8: d1 cd e0 d1 .str ↑“QM`Q” ++0021cc c1cc: 0e .dd1 $0e ++0021cd c1cd: 01 .dd1 $01 ++0021ce c1ce: cd b8 cf c3+ .str ↑“M8OCZQM`QM2O” ++0021da c1da: 21 .dd1 $21 ++0021db c1db: b1 d9 c3 e3+ .str ↑“1YCcQ” ++0021e0 c1e0: 21 .dd1 $21 ++0021e1 c1e1: b9 .dd1 $b9 ++0021e2 c1e2: d9 .dd1 $d9 ++0021e3 c1e3: 4e .dd1 $4e ++0021e4 c1e4: 23 .dd1 $23 ++0021e5 c1e5: 46 .dd1 $46 ++0021e6 c1e6: c3 .dd1 $c3 ++0021e7 c1e7: 24 .dd1 $24 ++0021e8 c1e8: da .dd1 $da ++0021e9 c1e9: 2a .dd1 $2a ++0021ea c1ea: b9 .dd1 $b9 ++0021eb c1eb: d9 .dd1 $d9 ++0021ec c1ec: eb .dd1 $eb ++0021ed c1ed: 2a .dd1 $2a ++0021ee c1ee: b1 .dd1 $b1 ++0021ef c1ef: d9 .dd1 $d9 ++0021f0 c1f0: 0e .dd1 $0e ++0021f1 c1f1: 80 .dd1 $80 ++0021f2 c1f2: c3 .dd1 $c3 ++0021f3 c1f3: 4f .dd1 $4f ++0021f4 c1f4: cf .dd1 $cf ++0021f5 c1f5: 21 .dd1 $21 ++0021f6 c1f6: ea .dd1 $ea ++0021f7 c1f7: d9 .dd1 $d9 ++0021f8 c1f8: 7e .dd1 $7e ++0021f9 c1f9: 23 .dd1 $23 ++0021fa c1fa: be .dd1 $be ++0021fb c1fb: c0 .dd1 $c0 ++0021fc c1fc: 3c .dd1 $3c ++0021fd c1fd: c9 .dd1 $c9 ++0021fe c1fe: 21 .dd1 $21 ++0021ff c1ff: ff .dd1 $ff ++002200 c200: ff .dd1 $ff ++002201 c201: 22 .dd1 $22 ++002202 c202: ea .dd1 $ea ++002203 c203: d9 .dd1 $d9 ++002204 c204: c9 .dd1 $c9 ++002205 c205: 2a .dd1 $2a ++002206 c206: c8 .dd1 $c8 ++002207 c207: d9 .dd1 $d9 ++002208 c208: eb .dd1 $eb ++002209 c209: 2a .dd1 $2a ++00220a c20a: ea .dd1 $ea ++00220b c20b: d9 .dd1 $d9 ++00220c c20c: 23 .dd1 $23 ++00220d c20d: 22 .dd1 $22 ++00220e c20e: ea .dd1 $ea ++00220f c20f: d9 .dd1 $d9 ++002210 c210: cd .dd1 $cd ++002211 c211: 95 .dd1 $95 ++002212 c212: d1 .dd1 $d1 ++002213 c213: d2 .dd1 $d2 ++002214 c214: 19 .dd1 $19 ++002215 c215: d2 c3 fe d1 .str ↑“RC~Q” ++002219 c219: 3a .dd1 $3a ++00221a c21a: ea .dd1 $ea ++00221b c21b: d9 .dd1 $d9 ++00221c c21c: e6 .dd1 $e6 ++00221d c21d: 03 .dd1 $03 ++00221e c21e: 06 .dd1 $06 ++00221f c21f: 05 .dd1 $05 ++002220 c220: 87 .dd1 $87 ++002221 c221: 05 .dd1 $05 ++002222 c222: c2 .dd1 $c2 ++002223 c223: 20 .dd1 $20 ++002224 c224: d2 .dd1 $d2 ++002225 c225: 32 .dd1 $32 ++002226 c226: e9 d9 b7 c0+ .str ↑“iY7@EMCOMTQAC” ++002233 c233: 9e .dd1 $9e ++002234 c234: d1 .dd1 $d1 ++002235 c235: 79 .dd1 $79 ++002236 c236: e6 .dd1 $e6 ++002237 c237: 07 3c 5f 57+ .str $07,“<_Wy” ++00223c c23c: 0f .dd1 $0f ++00223d c23d: 0f .dd1 $0f ++00223e c23e: 0f .dd1 $0f ++00223f c23f: e6 .dd1 $e6 ++002240 c240: 1f .dd1 $1f ++002241 c241: 4f .dd1 $4f ++002242 c242: 78 .dd1 $78 ++002243 c243: 87 87 87 87+ .str ↑$87,$87,$87,$87,$87,“1” ++002249 c249: 4f .dd1 $4f ++00224a c24a: 78 .dd1 $78 ++00224b c24b: 0f .dd1 $0f ++00224c c24c: 0f .dd1 $0f ++00224d c24d: 0f .dd1 $0f ++00224e c24e: e6 .dd1 $e6 ++00224f c24f: 1f .dd1 $1f ++002250 c250: 47 .dd1 $47 ++002251 c251: 2a .dd1 $2a ++002252 c252: bf .dd1 $bf ++002253 c253: d9 .dd1 $d9 ++002254 c254: 09 .dd1 $09 ++002255 c255: 7e .dd1 $7e ++002256 c256: 07 .dd1 $07 ++002257 c257: 1d .dd1 $1d ++002258 c258: c2 .dd1 $c2 ++002259 c259: 56 .dd1 $56 ++00225a c25a: d2 c9 d5 cd .str ↑“RIUM” ++00225e c25e: 35 .dd1 $35 ++00225f c25f: d2 e6 fe c1+ .str ↑“Rf~A1” ++002264 c264: 0f .dd1 $0f ++002265 c265: 15 .dd1 $15 ++002266 c266: c2 .dd1 $c2 ++002267 c267: 64 .dd1 $64 ++002268 c268: d2 .dd1 $d2 ++002269 c269: 77 .dd1 $77 ++00226a c26a: c9 .dd1 $c9 ++00226b c26b: cd .dd1 $cd ++00226c c26c: 5e .dd1 $5e ++00226d c26d: d1 .dd1 $d1 ++00226e c26e: 11 .dd1 $11 ++00226f c26f: 10 .dd1 $10 ++002270 c270: 00 .dd1 $00 ++002271 c271: 19 .dd1 $19 ++002272 c272: c5 .dd1 $c5 ++002273 c273: 0e .dd1 $0e ++002274 c274: 11 .dd1 $11 ++002275 c275: d1 .dd1 $d1 ++002276 c276: 0d .dd1 $0d ++002277 c277: c8 .dd1 $c8 ++002278 c278: d5 .dd1 $d5 ++002279 c279: 3a .dd1 $3a ++00227a c27a: dd d9 b7 ca .str ↑“]Y7J” ++00227e c27e: 88 .dd1 $88 ++00227f c27f: d2 .dd1 $d2 ++002280 c280: c5 .dd1 $c5 ++002281 c281: e5 .dd1 $e5 ++002282 c282: 4e .dd1 $4e ++002283 c283: 06 .dd1 $06 ++002284 c284: 00 .dd1 $00 ++002285 c285: c3 .dd1 $c3 ++002286 c286: 8e .dd1 $8e ++002287 c287: d2 .dd1 $d2 ++002288 c288: 0d .dd1 $0d ++002289 c289: c5 .dd1 $c5 ++00228a c28a: 4e .dd1 $4e ++00228b c28b: 23 .dd1 $23 ++00228c c28c: 46 .dd1 $46 ++00228d c28d: e5 .dd1 $e5 ++00228e c28e: 79 .dd1 $79 ++00228f c28f: b0 .dd1 $b0 ++002290 c290: ca .dd1 $ca ++002291 c291: 9d .dd1 $9d ++002292 c292: d2 .dd1 $d2 ++002293 c293: 2a .dd1 $2a ++002294 c294: c6 .dd1 $c6 ++002295 c295: d9 .dd1 $d9 ++002296 c296: 7d .dd1 $7d ++002297 c297: 91 .dd1 $91 ++002298 c298: 7c .dd1 $7c ++002299 c299: 98 .dd1 $98 ++00229a c29a: d4 .dd1 $d4 ++00229b c29b: 5c .dd1 $5c ++00229c c29c: d2 .dd1 $d2 ++00229d c29d: e1 .dd1 $e1 ++00229e c29e: 23 .dd1 $23 ++00229f c29f: c1 .dd1 $c1 ++0022a0 c2a0: c3 .dd1 $c3 ++0022a1 c2a1: 75 .dd1 $75 ++0022a2 c2a2: d2 .dd1 $d2 ++0022a3 c2a3: 2a .dd1 $2a ++0022a4 c2a4: c6 .dd1 $c6 ++0022a5 c2a5: d9 .dd1 $d9 ++0022a6 c2a6: 0e .dd1 $0e ++0022a7 c2a7: 03 .dd1 $03 ++0022a8 c2a8: cd .dd1 $cd ++0022a9 c2a9: ea .dd1 $ea ++0022aa c2aa: d0 .dd1 $d0 ++0022ab c2ab: 23 44 4d 2a .str “#DM*” ++0022af c2af: bf .dd1 $bf ++0022b0 c2b0: d9 .dd1 $d9 ++0022b1 c2b1: 36 .dd1 $36 ++0022b2 c2b2: 00 .dd1 $00 ++0022b3 c2b3: 23 .dd1 $23 ++0022b4 c2b4: 0b .dd1 $0b ++0022b5 c2b5: 78 .dd1 $78 ++0022b6 c2b6: b1 c2 b1 d2 .str ↑“1B1R” ++0022ba c2ba: 2a .dd1 $2a ++0022bb c2bb: ca .dd1 $ca ++0022bc c2bc: d9 .dd1 $d9 ++0022bd c2bd: eb .dd1 $eb ++0022be c2be: 2a .dd1 $2a ++0022bf c2bf: bf .dd1 $bf ++0022c0 c2c0: d9 .dd1 $d9 ++0022c1 c2c1: 73 .dd1 $73 ++0022c2 c2c2: 23 .dd1 $23 ++0022c3 c2c3: 72 .dd1 $72 ++0022c4 c2c4: cd .dd1 $cd ++0022c5 c2c5: a1 .dd1 $a1 ++0022c6 c2c6: cf .dd1 $cf ++0022c7 c2c7: 2a .dd1 $2a ++0022c8 c2c8: b3 .dd1 $b3 ++0022c9 c2c9: d9 .dd1 $d9 ++0022ca c2ca: 36 .dd1 $36 ++0022cb c2cb: 03 .dd1 $03 ++0022cc c2cc: 23 .dd1 $23 ++0022cd c2cd: 36 .dd1 $36 ++0022ce c2ce: 00 .dd1 $00 ++0022cf c2cf: cd .dd1 $cd ++0022d0 c2d0: fe .dd1 $fe ++0022d1 c2d1: d1 .dd1 $d1 ++0022d2 c2d2: 0e .dd1 $0e ++0022d3 c2d3: ff .dd1 $ff ++0022d4 c2d4: cd .dd1 $cd ++0022d5 c2d5: 05 .dd1 $05 ++0022d6 c2d6: d2 cd f5 d1+ .str ↑“RMuQHM” ++0022dc c2dc: 5e .dd1 $5e ++0022dd c2dd: d1 .dd1 $d1 ++0022de c2de: 3e .dd1 $3e ++0022df c2df: e5 be ca d2+ .str ↑“e>JRR” ++0022e4 c2e4: 3a .dd1 $3a ++0022e5 c2e5: 41 .dd1 $41 ++0022e6 c2e6: cf be c2 f6+ .str ↑“O>BvR” ++0022eb c2eb: 23 .dd1 $23 ++0022ec c2ec: 7e .dd1 $7e ++0022ed c2ed: d6 .dd1 $d6 ++0022ee c2ee: 24 .dd1 $24 ++0022ef c2ef: c2 .dd1 $c2 ++0022f0 c2f0: f6 .dd1 $f6 ++0022f1 c2f1: d2 .dd1 $d2 ++0022f2 c2f2: 3d .dd1 $3d ++0022f3 c2f3: 32 .dd1 $32 ++0022f4 c2f4: 45 .dd1 $45 ++0022f5 c2f5: cf .dd1 $cf ++0022f6 c2f6: 0e .dd1 $0e ++0022f7 c2f7: 01 .dd1 $01 ++0022f8 c2f8: cd .dd1 $cd ++0022f9 c2f9: 6b .dd1 $6b ++0022fa c2fa: d2 .dd1 $d2 ++0022fb c2fb: cd .dd1 $cd ++0022fc c2fc: 8c .dd1 $8c ++0022fd c2fd: d1 c3 d2 d2 .str ↑“QCRR” ++002301 c301: 3a .dd1 $3a ++002302 c302: d4 .dd1 $d4 ++002303 c303: d9 .dd1 $d9 ++002304 c304: c3 .dd1 $c3 ++002305 c305: 01 .dd1 $01 ++002306 c306: cf .dd1 $cf ++002307 c307: c5 .dd1 $c5 ++002308 c308: f5 .dd1 $f5 ++002309 c309: 3a .dd1 $3a ++00230a c30a: c5 .dd1 $c5 ++00230b c30b: d9 .dd1 $d9 ++00230c c30c: 2f .dd1 $2f ++00230d c30d: 47 .dd1 $47 ++00230e c30e: 79 .dd1 $79 ++00230f c30f: a0 .dd1 $a0 ++002310 c310: 4f .dd1 $4f ++002311 c311: f1 .dd1 $f1 ++002312 c312: a0 .dd1 $a0 ++002313 c313: 91 .dd1 $91 ++002314 c314: e6 .dd1 $e6 ++002315 c315: 1f .dd1 $1f ++002316 c316: c1 .dd1 $c1 ++002317 c317: c9 .dd1 $c9 ++002318 c318: 3e .dd1 $3e ++002319 c319: ff .dd1 $ff ++00231a c31a: 32 .dd1 $32 ++00231b c31b: d4 .dd1 $d4 ++00231c c31c: d9 .dd1 $d9 ++00231d c31d: 21 .dd1 $21 ++00231e c31e: d8 .dd1 $d8 ++00231f c31f: d9 .dd1 $d9 ++002320 c320: 71 .dd1 $71 ++002321 c321: 2a .dd1 $2a ++002322 c322: 43 .dd1 $43 ++002323 c323: cf .dd1 $cf ++002324 c324: 22 .dd1 $22 ++002325 c325: d9 d9 cd fe+ .str ↑“YYM~QM!O” ++00232d c32d: 0e .dd1 $0e ++00232e c32e: 00 .dd1 $00 ++00232f c32f: cd .dd1 $cd ++002330 c330: 05 .dd1 $05 ++002331 c331: d2 cd f5 d1+ .str ↑“RMuQJ” ++002336 c336: 94 .dd1 $94 ++002337 c337: d3 .dd1 $d3 ++002338 c338: 2a .dd1 $2a ++002339 c339: d9 .dd1 $d9 ++00233a c33a: d9 .dd1 $d9 ++00233b c33b: eb .dd1 $eb ++00233c c33c: 1a .dd1 $1a ++00233d c33d: fe .dd1 $fe ++00233e c33e: e5 .dd1 $e5 ++00233f c33f: ca .dd1 $ca ++002340 c340: 4a .dd1 $4a ++002341 c341: d3 .dd1 $d3 ++002342 c342: d5 .dd1 $d5 ++002343 c343: cd .dd1 $cd ++002344 c344: 7f .dd1 $7f ++002345 c345: d1 .dd1 $d1 ++002346 c346: d1 .dd1 $d1 ++002347 c347: d2 .dd1 $d2 ++002348 c348: 94 .dd1 $94 ++002349 c349: d3 .dd1 $d3 ++00234a c34a: cd .dd1 $cd ++00234b c34b: 5e .dd1 $5e ++00234c c34c: d1 .dd1 $d1 ++00234d c34d: 3a .dd1 $3a ++00234e c34e: d8 .dd1 $d8 ++00234f c34f: d9 .dd1 $d9 ++002350 c350: 4f .dd1 $4f ++002351 c351: 06 .dd1 $06 ++002352 c352: 00 .dd1 $00 ++002353 c353: 79 .dd1 $79 ++002354 c354: b7 .dd1 $b7 ++002355 c355: ca .dd1 $ca ++002356 c356: 83 .dd1 $83 ++002357 c357: d3 .dd1 $d3 ++002358 c358: 1a .dd1 $1a ++002359 c359: fe .dd1 $fe ++00235a c35a: 3f .dd1 $3f ++00235b c35b: ca .dd1 $ca ++00235c c35c: 7c .dd1 $7c ++00235d c35d: d3 .dd1 $d3 ++00235e c35e: 78 .dd1 $78 ++00235f c35f: fe .dd1 $fe ++002360 c360: 0d .dd1 $0d ++002361 c361: ca .dd1 $ca ++002362 c362: 7c .dd1 $7c ++002363 c363: d3 .dd1 $d3 ++002364 c364: fe .dd1 $fe ++002365 c365: 0c .dd1 $0c ++002366 c366: 1a .dd1 $1a ++002367 c367: ca .dd1 $ca ++002368 c368: 73 .dd1 $73 ++002369 c369: d3 .dd1 $d3 ++00236a c36a: 96 .dd1 $96 ++00236b c36b: e6 .dd1 $e6 ++00236c c36c: 7f .dd1 $7f ++00236d c36d: c2 .dd1 $c2 ++00236e c36e: 2d .dd1 $2d ++00236f c36f: d3 .dd1 $d3 ++002370 c370: c3 .dd1 $c3 ++002371 c371: 7c .dd1 $7c ++002372 c372: d3 .dd1 $d3 ++002373 c373: c5 .dd1 $c5 ++002374 c374: 4e .dd1 $4e ++002375 c375: cd .dd1 $cd ++002376 c376: 07 .dd1 $07 ++002377 c377: d3 .dd1 $d3 ++002378 c378: c1 .dd1 $c1 ++002379 c379: c2 .dd1 $c2 ++00237a c37a: 2d .dd1 $2d ++00237b c37b: d3 .dd1 $d3 ++00237c c37c: 13 .dd1 $13 ++00237d c37d: 23 .dd1 $23 ++00237e c37e: 04 .dd1 $04 ++00237f c37f: 0d .dd1 $0d ++002380 c380: c3 .dd1 $c3 ++002381 c381: 53 .dd1 $53 ++002382 c382: d3 .dd1 $d3 ++002383 c383: 3a .dd1 $3a ++002384 c384: ea .dd1 $ea ++002385 c385: d9 .dd1 $d9 ++002386 c386: e6 .dd1 $e6 ++002387 c387: 03 .dd1 $03 ++002388 c388: 32 .dd1 $32 ++002389 c389: 45 .dd1 $45 ++00238a c38a: cf .dd1 $cf ++00238b c38b: 21 .dd1 $21 ++00238c c38c: d4 .dd1 $d4 ++00238d c38d: d9 .dd1 $d9 ++00238e c38e: 7e .dd1 $7e ++00238f c38f: 17 .dd1 $17 ++002390 c390: d0 .dd1 $d0 ++002391 c391: af .dd1 $af ++002392 c392: 77 .dd1 $77 ++002393 c393: c9 cd fe d1 .str ↑“IM~Q” ++002397 c397: 3e .dd1 $3e ++002398 c398: ff .dd1 $ff ++002399 c399: c3 .dd1 $c3 ++00239a c39a: 01 .dd1 $01 ++00239b c39b: cf .dd1 $cf ++00239c c39c: cd .dd1 $cd ++00239d c39d: 54 .dd1 $54 ++00239e c39e: d1 .dd1 $d1 ++00239f c39f: 0e .dd1 $0e ++0023a0 c3a0: 0c .dd1 $0c ++0023a1 c3a1: cd .dd1 $cd ++0023a2 c3a2: 18 .dd1 $18 ++0023a3 c3a3: d3 cd f5 d1+ .str ↑“SMuQHM” ++0023a9 c3a9: 44 .dd1 $44 ++0023aa c3aa: d1 .dd1 $d1 ++0023ab c3ab: cd .dd1 $cd ++0023ac c3ac: 5e .dd1 $5e ++0023ad c3ad: d1 .dd1 $d1 ++0023ae c3ae: 36 .dd1 $36 ++0023af c3af: e5 .dd1 $e5 ++0023b0 c3b0: 0e .dd1 $0e ++0023b1 c3b1: 00 .dd1 $00 ++0023b2 c3b2: cd .dd1 $cd ++0023b3 c3b3: 6b .dd1 $6b ++0023b4 c3b4: d2 cd c6 d1+ .str ↑“RMFQM” ++0023b9 c3b9: 2d .dd1 $2d ++0023ba c3ba: d3 c3 a4 d3 .str ↑“SC$S” ++0023be c3be: 50 .dd1 $50 ++0023bf c3bf: 59 .dd1 $59 ++0023c0 c3c0: 79 .dd1 $79 ++0023c1 c3c1: b0 ca d1 d3 .str ↑“0JQS” ++0023c5 c3c5: 0b .dd1 $0b ++0023c6 c3c6: d5 .dd1 $d5 ++0023c7 c3c7: c5 .dd1 $c5 ++0023c8 c3c8: cd .dd1 $cd ++0023c9 c3c9: 35 .dd1 $35 ++0023ca c3ca: d2 .dd1 $d2 ++0023cb c3cb: 1f .dd1 $1f ++0023cc c3cc: d2 ec d3 c1+ .str ↑“RlSAQ” ++0023d1 c3d1: 2a .dd1 $2a ++0023d2 c3d2: c6 .dd1 $c6 ++0023d3 c3d3: d9 .dd1 $d9 ++0023d4 c3d4: 7b .dd1 $7b ++0023d5 c3d5: 95 .dd1 $95 ++0023d6 c3d6: 7a .dd1 $7a ++0023d7 c3d7: 9c .dd1 $9c ++0023d8 c3d8: d2 .dd1 $d2 ++0023d9 c3d9: f4 .dd1 $f4 ++0023da c3da: d3 .dd1 $d3 ++0023db c3db: 13 .dd1 $13 ++0023dc c3dc: c5 .dd1 $c5 ++0023dd c3dd: d5 .dd1 $d5 ++0023de c3de: 42 .dd1 $42 ++0023df c3df: 4b .dd1 $4b ++0023e0 c3e0: cd .dd1 $cd ++0023e1 c3e1: 35 .dd1 $35 ++0023e2 c3e2: d2 .dd1 $d2 ++0023e3 c3e3: 1f .dd1 $1f ++0023e4 c3e4: d2 ec d3 d1+ .str ↑“RlSQAC@S” ++0023ec c3ec: 17 .dd1 $17 ++0023ed c3ed: 3c .dd1 $3c ++0023ee c3ee: cd .dd1 $cd ++0023ef c3ef: 64 .dd1 $64 ++0023f0 c3f0: d2 e1 d1 c9 .str ↑“RaQI” ++0023f4 c3f4: 79 .dd1 $79 ++0023f5 c3f5: b0 c2 c0 d3 .str ↑“0B@S” ++0023f9 c3f9: 21 .dd1 $21 ++0023fa c3fa: 00 .dd1 $00 ++0023fb c3fb: 00 .dd1 $00 ++0023fc c3fc: c9 .dd1 $c9 ++0023fd c3fd: 0e .dd1 $0e ++0023fe c3fe: 00 .dd1 $00 ++0023ff c3ff: 1e .dd1 $1e ++002400 c400: 20 .dd1 $20 ++002401 c401: d5 .dd1 $d5 ++002402 c402: 06 .dd1 $06 ++002403 c403: 00 .dd1 $00 ++002404 c404: 2a .dd1 $2a ++002405 c405: 43 .dd1 $43 ++002406 c406: cf .dd1 $cf ++002407 c407: 09 .dd1 $09 ++002408 c408: eb .dd1 $eb ++002409 c409: cd .dd1 $cd ++00240a c40a: 5e .dd1 $5e ++00240b c40b: d1 .dd1 $d1 ++00240c c40c: c1 .dd1 $c1 ++00240d c40d: cd .dd1 $cd ++00240e c40e: 4f .dd1 $4f ++00240f c40f: cf cd c3 cf+ .str ↑“OMCOCFQM” ++002417 c417: 54 .dd1 $54 ++002418 c418: d1 .dd1 $d1 ++002419 c419: 0e .dd1 $0e ++00241a c41a: 0c .dd1 $0c ++00241b c41b: cd .dd1 $cd ++00241c c41c: 18 .dd1 $18 ++00241d c41d: d3 .dd1 $d3 ++00241e c41e: 2a .dd1 $2a ++00241f c41f: 43 .dd1 $43 ++002420 c420: cf .dd1 $cf ++002421 c421: 7e .dd1 $7e ++002422 c422: 11 .dd1 $11 ++002423 c423: 10 .dd1 $10 ++002424 c424: 00 .dd1 $00 ++002425 c425: 19 .dd1 $19 ++002426 c426: 77 .dd1 $77 ++002427 c427: cd f5 d1 c8+ .str ↑“MuQHM” ++00242c c42c: 44 .dd1 $44 ++00242d c42d: d1 .dd1 $d1 ++00242e c42e: 0e .dd1 $0e ++00242f c42f: 10 .dd1 $10 ++002430 c430: 1e .dd1 $1e ++002431 c431: 0c .dd1 $0c ++002432 c432: cd .dd1 $cd ++002433 c433: 01 .dd1 $01 ++002434 c434: d4 .dd1 $d4 ++002435 c435: cd .dd1 $cd ++002436 c436: 2d .dd1 $2d ++002437 c437: d3 .dd1 $d3 ++002438 c438: c3 .dd1 $c3 ++002439 c439: 27 .dd1 $27 ++00243a c43a: d4 .dd1 $d4 ++00243b c43b: 0e .dd1 $0e ++00243c c43c: 0c .dd1 $0c ++00243d c43d: cd .dd1 $cd ++00243e c43e: 18 .dd1 $18 ++00243f c43f: d3 cd f5 d1+ .str ↑“SMuQH” ++002444 c444: 0e .dd1 $0e ++002445 c445: 00 .dd1 $00 ++002446 c446: 1e .dd1 $1e ++002447 c447: 0c .dd1 $0c ++002448 c448: cd .dd1 $cd ++002449 c449: 01 .dd1 $01 ++00244a c44a: d4 .dd1 $d4 ++00244b c44b: cd .dd1 $cd ++00244c c44c: 2d .dd1 $2d ++00244d c44d: d3 .dd1 $d3 ++00244e c44e: c3 .dd1 $c3 ++00244f c44f: 40 .dd1 $40 ++002450 c450: d4 .dd1 $d4 ++002451 c451: 0e .dd1 $0e ++002452 c452: 0f .dd1 $0f ++002453 c453: cd .dd1 $cd ++002454 c454: 18 .dd1 $18 ++002455 c455: d3 cd f5 d1+ .str ↑“SMuQHM&P” ++00245d c45d: 7e .dd1 $7e ++00245e c45e: f5 .dd1 $f5 ++00245f c45f: e5 .dd1 $e5 ++002460 c460: cd .dd1 $cd ++002461 c461: 5e .dd1 $5e ++002462 c462: d1 .dd1 $d1 ++002463 c463: eb .dd1 $eb ++002464 c464: 2a .dd1 $2a ++002465 c465: 43 .dd1 $43 ++002466 c466: cf .dd1 $cf ++002467 c467: 0e .dd1 $0e ++002468 c468: 20 .dd1 $20 ++002469 c469: d5 .dd1 $d5 ++00246a c46a: cd .dd1 $cd ++00246b c46b: 4f .dd1 $4f ++00246c c46c: cf .dd1 $cf ++00246d c46d: cd .dd1 $cd ++00246e c46e: 78 .dd1 $78 ++00246f c46f: d1 .dd1 $d1 ++002470 c470: d1 .dd1 $d1 ++002471 c471: 21 .dd1 $21 ++002472 c472: 0c .dd1 $0c ++002473 c473: 00 .dd1 $00 ++002474 c474: 19 .dd1 $19 ++002475 c475: 4e .dd1 $4e ++002476 c476: 21 .dd1 $21 ++002477 c477: 0f .dd1 $0f ++002478 c478: 00 .dd1 $00 ++002479 c479: 19 .dd1 $19 ++00247a c47a: 46 .dd1 $46 ++00247b c47b: e1 .dd1 $e1 ++00247c c47c: f1 .dd1 $f1 ++00247d c47d: 77 .dd1 $77 ++00247e c47e: 79 .dd1 $79 ++00247f c47f: be .dd1 $be ++002480 c480: 78 .dd1 $78 ++002481 c481: ca .dd1 $ca ++002482 c482: 8b .dd1 $8b ++002483 c483: d4 .dd1 $d4 ++002484 c484: 3e .dd1 $3e ++002485 c485: 00 .dd1 $00 ++002486 c486: da .dd1 $da ++002487 c487: 8b .dd1 $8b ++002488 c488: d4 .dd1 $d4 ++002489 c489: 3e .dd1 $3e ++00248a c48a: 80 .dd1 $80 ++00248b c48b: 2a .dd1 $2a ++00248c c48c: 43 .dd1 $43 ++00248d c48d: cf .dd1 $cf ++00248e c48e: 11 .dd1 $11 ++00248f c48f: 0f .dd1 $0f ++002490 c490: 00 .dd1 $00 ++002491 c491: 19 .dd1 $19 ++002492 c492: 77 .dd1 $77 ++002493 c493: c9 .dd1 $c9 ++002494 c494: 7e .dd1 $7e ++002495 c495: 23 .dd1 $23 ++002496 c496: b6 .dd1 $b6 ++002497 c497: 2b .dd1 $2b ++002498 c498: c0 .dd1 $c0 ++002499 c499: 1a .dd1 $1a ++00249a c49a: 77 .dd1 $77 ++00249b c49b: 13 .dd1 $13 ++00249c c49c: 23 .dd1 $23 ++00249d c49d: 1a .dd1 $1a ++00249e c49e: 77 .dd1 $77 ++00249f c49f: 1b .dd1 $1b ++0024a0 c4a0: 2b .dd1 $2b ++0024a1 c4a1: c9 .dd1 $c9 ++0024a2 c4a2: af .dd1 $af ++0024a3 c4a3: 32 .dd1 $32 ++0024a4 c4a4: 45 .dd1 $45 ++0024a5 c4a5: cf .dd1 $cf ++0024a6 c4a6: 32 .dd1 $32 ++0024a7 c4a7: ea .dd1 $ea ++0024a8 c4a8: d9 .dd1 $d9 ++0024a9 c4a9: 32 .dd1 $32 ++0024aa c4aa: eb .dd1 $eb ++0024ab c4ab: d9 .dd1 $d9 ++0024ac c4ac: cd .dd1 $cd ++0024ad c4ad: 1e .dd1 $1e ++0024ae c4ae: d1 .dd1 $d1 ++0024af c4af: c0 .dd1 $c0 ++0024b0 c4b0: cd .dd1 $cd ++0024b1 c4b1: 69 .dd1 $69 ++0024b2 c4b2: d1 .dd1 $d1 ++0024b3 c4b3: e6 .dd1 $e6 ++0024b4 c4b4: 80 .dd1 $80 ++0024b5 c4b5: c0 .dd1 $c0 ++0024b6 c4b6: 0e .dd1 $0e ++0024b7 c4b7: 0f .dd1 $0f ++0024b8 c4b8: cd .dd1 $cd ++0024b9 c4b9: 18 .dd1 $18 ++0024ba c4ba: d3 cd f5 d1+ .str ↑“SMuQH” ++0024bf c4bf: 01 .dd1 $01 ++0024c0 c4c0: 10 .dd1 $10 ++0024c1 c4c1: 00 .dd1 $00 ++0024c2 c4c2: cd .dd1 $cd ++0024c3 c4c3: 5e .dd1 $5e ++0024c4 c4c4: d1 .dd1 $d1 ++0024c5 c4c5: 09 .dd1 $09 ++0024c6 c4c6: eb .dd1 $eb ++0024c7 c4c7: 2a .dd1 $2a ++0024c8 c4c8: 43 .dd1 $43 ++0024c9 c4c9: cf .dd1 $cf ++0024ca c4ca: 09 .dd1 $09 ++0024cb c4cb: 0e .dd1 $0e ++0024cc c4cc: 10 .dd1 $10 ++0024cd c4cd: 3a .dd1 $3a ++0024ce c4ce: dd d9 b7 ca+ .str ↑“]Y7JhT” ++0024d4 c4d4: 7e .dd1 $7e ++0024d5 c4d5: b7 .dd1 $b7 ++0024d6 c4d6: 1a .dd1 $1a ++0024d7 c4d7: c2 .dd1 $c2 ++0024d8 c4d8: db .dd1 $db ++0024d9 c4d9: d4 .dd1 $d4 ++0024da c4da: 77 .dd1 $77 ++0024db c4db: b7 c2 e1 d4 .str ↑“7BaT” ++0024df c4df: 7e .dd1 $7e ++0024e0 c4e0: 12 .dd1 $12 ++0024e1 c4e1: be .dd1 $be ++0024e2 c4e2: c2 .dd1 $c2 ++0024e3 c4e3: 1f .dd1 $1f ++0024e4 c4e4: d5 c3 fd d4+ .str ↑“UC}TM” ++0024e9 c4e9: 94 .dd1 $94 ++0024ea c4ea: d4 .dd1 $d4 ++0024eb c4eb: eb .dd1 $eb ++0024ec c4ec: cd .dd1 $cd ++0024ed c4ed: 94 .dd1 $94 ++0024ee c4ee: d4 .dd1 $d4 ++0024ef c4ef: eb .dd1 $eb ++0024f0 c4f0: 1a .dd1 $1a ++0024f1 c4f1: be .dd1 $be ++0024f2 c4f2: c2 .dd1 $c2 ++0024f3 c4f3: 1f .dd1 $1f ++0024f4 c4f4: d5 .dd1 $d5 ++0024f5 c4f5: 13 .dd1 $13 ++0024f6 c4f6: 23 .dd1 $23 ++0024f7 c4f7: 1a .dd1 $1a ++0024f8 c4f8: be .dd1 $be ++0024f9 c4f9: c2 .dd1 $c2 ++0024fa c4fa: 1f .dd1 $1f ++0024fb c4fb: d5 .dd1 $d5 ++0024fc c4fc: 0d .dd1 $0d ++0024fd c4fd: 13 .dd1 $13 ++0024fe c4fe: 23 .dd1 $23 ++0024ff c4ff: 0d .dd1 $0d ++002500 c500: c2 .dd1 $c2 ++002501 c501: cd .dd1 $cd ++002502 c502: d4 .dd1 $d4 ++002503 c503: 01 .dd1 $01 ++002504 c504: ec .dd1 $ec ++002505 c505: ff .dd1 $ff ++002506 c506: 09 .dd1 $09 ++002507 c507: eb .dd1 $eb ++002508 c508: 09 .dd1 $09 ++002509 c509: 1a .dd1 $1a ++00250a c50a: be .dd1 $be ++00250b c50b: da .dd1 $da ++00250c c50c: 17 .dd1 $17 ++00250d c50d: d5 .dd1 $d5 ++00250e c50e: 77 .dd1 $77 ++00250f c50f: 01 .dd1 $01 ++002510 c510: 03 .dd1 $03 ++002511 c511: 00 .dd1 $00 ++002512 c512: 09 .dd1 $09 ++002513 c513: eb .dd1 $eb ++002514 c514: 09 .dd1 $09 ++002515 c515: 7e .dd1 $7e ++002516 c516: 12 .dd1 $12 ++002517 c517: 3e .dd1 $3e ++002518 c518: ff .dd1 $ff ++002519 c519: 32 .dd1 $32 ++00251a c51a: d2 .dd1 $d2 ++00251b c51b: d9 .dd1 $d9 ++00251c c51c: c3 .dd1 $c3 ++00251d c51d: 10 .dd1 $10 ++00251e c51e: d4 .dd1 $d4 ++00251f c51f: 21 .dd1 $21 ++002520 c520: 45 .dd1 $45 ++002521 c521: cf .dd1 $cf ++002522 c522: 35 .dd1 $35 ++002523 c523: c9 .dd1 $c9 ++002524 c524: cd .dd1 $cd ++002525 c525: 54 .dd1 $54 ++002526 c526: d1 .dd1 $d1 ++002527 c527: 2a .dd1 $2a ++002528 c528: 43 .dd1 $43 ++002529 c529: cf .dd1 $cf ++00252a c52a: e5 .dd1 $e5 ++00252b c52b: 21 .dd1 $21 ++00252c c52c: ac .dd1 $ac ++00252d c52d: d9 .dd1 $d9 ++00252e c52e: 22 .dd1 $22 ++00252f c52f: 43 .dd1 $43 ++002530 c530: cf .dd1 $cf ++002531 c531: 0e .dd1 $0e ++002532 c532: 01 .dd1 $01 ++002533 c533: cd .dd1 $cd ++002534 c534: 18 .dd1 $18 ++002535 c535: d3 cd f5 d1+ .str ↑“SMuQa” ++00253a c53a: 22 .dd1 $22 ++00253b c53b: 43 .dd1 $43 ++00253c c53c: cf .dd1 $cf ++00253d c53d: c8 .dd1 $c8 ++00253e c53e: eb .dd1 $eb ++00253f c53f: 21 .dd1 $21 ++002540 c540: 0f .dd1 $0f ++002541 c541: 00 .dd1 $00 ++002542 c542: 19 .dd1 $19 ++002543 c543: 0e .dd1 $0e ++002544 c544: 11 .dd1 $11 ++002545 c545: af .dd1 $af ++002546 c546: 77 .dd1 $77 ++002547 c547: 23 .dd1 $23 ++002548 c548: 0d .dd1 $0d ++002549 c549: c2 .dd1 $c2 ++00254a c54a: 46 .dd1 $46 ++00254b c54b: d5 .dd1 $d5 ++00254c c54c: 21 .dd1 $21 ++00254d c54d: 0d .dd1 $0d ++00254e c54e: 00 .dd1 $00 ++00254f c54f: 19 .dd1 $19 ++002550 c550: 77 .dd1 $77 ++002551 c551: cd .dd1 $cd ++002552 c552: 8c .dd1 $8c ++002553 c553: d1 cd fd d3+ .str ↑“QM}SC” ++002558 c558: 78 .dd1 $78 ++002559 c559: d1 .dd1 $d1 ++00255a c55a: af .dd1 $af ++00255b c55b: 32 .dd1 $32 ++00255c c55c: d2 d9 cd a2+ .str ↑“RYM"TMuQH” ++002565 c565: 2a .dd1 $2a ++002566 c566: 43 .dd1 $43 ++002567 c567: cf .dd1 $cf ++002568 c568: 01 .dd1 $01 ++002569 c569: 0c .dd1 $0c ++00256a c56a: 00 .dd1 $00 ++00256b c56b: 09 .dd1 $09 ++00256c c56c: 7e .dd1 $7e ++00256d c56d: 3c .dd1 $3c ++00256e c56e: e6 .dd1 $e6 ++00256f c56f: 1f .dd1 $1f ++002570 c570: 77 .dd1 $77 ++002571 c571: ca .dd1 $ca ++002572 c572: 83 .dd1 $83 ++002573 c573: d5 .dd1 $d5 ++002574 c574: 47 .dd1 $47 ++002575 c575: 3a .dd1 $3a ++002576 c576: c5 .dd1 $c5 ++002577 c577: d9 .dd1 $d9 ++002578 c578: a0 .dd1 $a0 ++002579 c579: 21 .dd1 $21 ++00257a c57a: d2 d9 a6 ca .str ↑“RY&J” ++00257e c57e: 8e .dd1 $8e ++00257f c57f: d5 c3 ac d5 .str ↑“UC,U” ++002583 c583: 01 .dd1 $01 ++002584 c584: 02 .dd1 $02 ++002585 c585: 00 .dd1 $00 ++002586 c586: 09 .dd1 $09 ++002587 c587: 34 .dd1 $34 ++002588 c588: 7e .dd1 $7e ++002589 c589: e6 .dd1 $e6 ++00258a c58a: 0f .dd1 $0f ++00258b c58b: ca .dd1 $ca ++00258c c58c: b6 .dd1 $b6 ++00258d c58d: d5 .dd1 $d5 ++00258e c58e: 0e .dd1 $0e ++00258f c58f: 0f .dd1 $0f ++002590 c590: cd .dd1 $cd ++002591 c591: 18 .dd1 $18 ++002592 c592: d3 cd f5 d1+ .str ↑“SMuQB,U” ++002599 c599: 3a .dd1 $3a ++00259a c59a: d3 .dd1 $d3 ++00259b c59b: d9 .dd1 $d9 ++00259c c59c: 3c .dd1 $3c ++00259d c59d: ca b6 d5 cd .str ↑“J6UM” ++0025a1 c5a1: 24 .dd1 $24 ++0025a2 c5a2: d5 cd f5 d1+ .str ↑“UMuQJ6UC/UM” ++0025ad c5ad: 5a .dd1 $5a ++0025ae c5ae: d4 cd bb d0+ .str ↑“TM;P/C” ++0025b4 c5b4: 01 .dd1 $01 ++0025b5 c5b5: cf .dd1 $cf ++0025b6 c5b6: cd .dd1 $cd ++0025b7 c5b7: 05 .dd1 $05 ++0025b8 c5b8: cf .dd1 $cf ++0025b9 c5b9: c3 .dd1 $c3 ++0025ba c5ba: 78 .dd1 $78 ++0025bb c5bb: d1 .dd1 $d1 ++0025bc c5bc: 3e .dd1 $3e ++0025bd c5bd: 01 .dd1 $01 ++0025be c5be: 32 .dd1 $32 ++0025bf c5bf: d5 .dd1 $d5 ++0025c0 c5c0: d9 .dd1 $d9 ++0025c1 c5c1: 3e .dd1 $3e ++0025c2 c5c2: ff .dd1 $ff ++0025c3 c5c3: 32 .dd1 $32 ++0025c4 c5c4: d3 d9 cd bb+ .str ↑“SYM;P” ++0025c9 c5c9: 3a .dd1 $3a ++0025ca c5ca: e3 .dd1 $e3 ++0025cb c5cb: d9 .dd1 $d9 ++0025cc c5cc: 21 .dd1 $21 ++0025cd c5cd: e1 d9 be da+ .str ↑“aY>ZfU~” ++0025d4 c5d4: 80 .dd1 $80 ++0025d5 c5d5: c2 fb d5 cd .str ↑“B{UM” ++0025d9 c5d9: 5a .dd1 $5a ++0025da c5da: d5 .dd1 $d5 ++0025db c5db: af .dd1 $af ++0025dc c5dc: 32 .dd1 $32 ++0025dd c5dd: e3 .dd1 $e3 ++0025de c5de: d9 .dd1 $d9 ++0025df c5df: 3a .dd1 $3a ++0025e0 c5e0: 45 .dd1 $45 ++0025e1 c5e1: cf b7 c2 fb+ .str ↑“O7B{UM” ++0025e7 c5e7: 77 .dd1 $77 ++0025e8 c5e8: d0 .dd1 $d0 ++0025e9 c5e9: cd .dd1 $cd ++0025ea c5ea: 84 .dd1 $84 ++0025eb c5eb: d0 ca fb d5+ .str ↑“PJ{UM”,$8a,“PMQOM2OCRPC” ++0025fc c5fc: 05 .dd1 $05 ++0025fd c5fd: cf .dd1 $cf ++0025fe c5fe: 3e .dd1 $3e ++0025ff c5ff: 01 .dd1 $01 ++002600 c600: 32 .dd1 $32 ++002601 c601: d5 .dd1 $d5 ++002602 c602: d9 .dd1 $d9 ++002603 c603: 3e .dd1 $3e ++002604 c604: 00 .dd1 $00 ++002605 c605: 32 .dd1 $32 ++002606 c606: d3 .dd1 $d3 ++002607 c607: d9 .dd1 $d9 ++002608 c608: cd .dd1 $cd ++002609 c609: 54 .dd1 $54 ++00260a c60a: d1 .dd1 $d1 ++00260b c60b: 2a .dd1 $2a ++00260c c60c: 43 .dd1 $43 ++00260d c60d: cf .dd1 $cf ++00260e c60e: cd .dd1 $cd ++00260f c60f: 47 .dd1 $47 ++002610 c610: d1 cd bb d0 .str ↑“QM;P” ++002614 c614: 3a .dd1 $3a ++002615 c615: e3 .dd1 $e3 ++002616 c616: d9 .dd1 $d9 ++002617 c617: fe .dd1 $fe ++002618 c618: 80 .dd1 $80 ++002619 c619: d2 .dd1 $d2 ++00261a c61a: 05 .dd1 $05 ++00261b c61b: cf .dd1 $cf ++00261c c61c: cd .dd1 $cd ++00261d c61d: 77 .dd1 $77 ++00261e c61e: d0 .dd1 $d0 ++00261f c61f: cd .dd1 $cd ++002620 c620: 84 .dd1 $84 ++002621 c621: d0 .dd1 $d0 ++002622 c622: 0e .dd1 $0e ++002623 c623: 00 .dd1 $00 ++002624 c624: c2 .dd1 $c2 ++002625 c625: 6e .dd1 $6e ++002626 c626: d6 .dd1 $d6 ++002627 c627: cd .dd1 $cd ++002628 c628: 3e .dd1 $3e ++002629 c629: d0 .dd1 $d0 ++00262a c62a: 32 .dd1 $32 ++00262b c62b: d7 .dd1 $d7 ++00262c c62c: d9 .dd1 $d9 ++00262d c62d: 01 .dd1 $01 ++00262e c62e: 00 .dd1 $00 ++00262f c62f: 00 .dd1 $00 ++002630 c630: b7 .dd1 $b7 ++002631 c631: ca .dd1 $ca ++002632 c632: 3b .dd1 $3b ++002633 c633: d6 .dd1 $d6 ++002634 c634: 4f .dd1 $4f ++002635 c635: 0b .dd1 $0b ++002636 c636: cd .dd1 $cd ++002637 c637: 5e .dd1 $5e ++002638 c638: d0 .dd1 $d0 ++002639 c639: 44 .dd1 $44 ++00263a c63a: 4d .dd1 $4d ++00263b c63b: cd .dd1 $cd ++00263c c63c: be .dd1 $be ++00263d c63d: d3 .dd1 $d3 ++00263e c63e: 7d .dd1 $7d ++00263f c63f: b4 .dd1 $b4 ++002640 c640: c2 .dd1 $c2 ++002641 c641: 48 .dd1 $48 ++002642 c642: d6 .dd1 $d6 ++002643 c643: 3e .dd1 $3e ++002644 c644: 02 .dd1 $02 ++002645 c645: c3 .dd1 $c3 ++002646 c646: 01 .dd1 $01 ++002647 c647: cf .dd1 $cf ++002648 c648: 22 .dd1 $22 ++002649 c649: e5 .dd1 $e5 ++00264a c64a: d9 .dd1 $d9 ++00264b c64b: eb .dd1 $eb ++00264c c64c: 2a .dd1 $2a ++00264d c64d: 43 .dd1 $43 ++00264e c64e: cf .dd1 $cf ++00264f c64f: 01 .dd1 $01 ++002650 c650: 10 .dd1 $10 ++002651 c651: 00 .dd1 $00 ++002652 c652: 09 .dd1 $09 ++002653 c653: 3a .dd1 $3a ++002654 c654: dd .dd1 $dd ++002655 c655: d9 .dd1 $d9 ++002656 c656: b7 .dd1 $b7 ++002657 c657: 3a .dd1 $3a ++002658 c658: d7 .dd1 $d7 ++002659 c659: d9 .dd1 $d9 ++00265a c65a: ca .dd1 $ca ++00265b c65b: 64 .dd1 $64 ++00265c c65c: d6 .dd1 $d6 ++00265d c65d: cd .dd1 $cd ++00265e c65e: 64 .dd1 $64 ++00265f c65f: d1 .dd1 $d1 ++002660 c660: 73 .dd1 $73 ++002661 c661: c3 .dd1 $c3 ++002662 c662: 6c .dd1 $6c ++002663 c663: d6 .dd1 $d6 ++002664 c664: 4f .dd1 $4f ++002665 c665: 06 .dd1 $06 ++002666 c666: 00 .dd1 $00 ++002667 c667: 09 .dd1 $09 ++002668 c668: 09 .dd1 $09 ++002669 c669: 73 .dd1 $73 ++00266a c66a: 23 .dd1 $23 ++00266b c66b: 72 .dd1 $72 ++00266c c66c: 0e .dd1 $0e ++00266d c66d: 02 .dd1 $02 ++00266e c66e: 3a .dd1 $3a ++00266f c66f: 45 .dd1 $45 ++002670 c670: cf b7 c0 c5+ .str ↑“O7@EM”,$8a,“P” ++002677 c677: 3a .dd1 $3a ++002678 c678: d5 .dd1 $d5 ++002679 c679: d9 .dd1 $d9 ++00267a c67a: 3d .dd1 $3d ++00267b c67b: 3d .dd1 $3d ++00267c c67c: c2 bb d6 c1+ .str ↑“B;VAE” ++002681 c681: 79 .dd1 $79 ++002682 c682: 3d .dd1 $3d ++002683 c683: 3d .dd1 $3d ++002684 c684: c2 bb d6 e5 .str ↑“B;Ve” ++002688 c688: 2a .dd1 $2a ++002689 c689: b9 .dd1 $b9 ++00268a c68a: d9 .dd1 $d9 ++00268b c68b: 57 .dd1 $57 ++00268c c68c: 77 .dd1 $77 ++00268d c68d: 23 .dd1 $23 ++00268e c68e: 14 .dd1 $14 ++00268f c68f: f2 .dd1 $f2 ++002690 c690: 8c .dd1 $8c ++002691 c691: d6 cd e0 d1 .str ↑“VM`Q” ++002695 c695: 2a .dd1 $2a ++002696 c696: e7 .dd1 $e7 ++002697 c697: d9 .dd1 $d9 ++002698 c698: 0e .dd1 $0e ++002699 c699: 02 .dd1 $02 ++00269a c69a: 22 .dd1 $22 ++00269b c69b: e5 d9 c5 cd+ .str ↑“eYEMQOAM8O” ++0026a5 c6a5: 2a .dd1 $2a ++0026a6 c6a6: e5 .dd1 $e5 ++0026a7 c6a7: d9 .dd1 $d9 ++0026a8 c6a8: 0e .dd1 $0e ++0026a9 c6a9: 00 .dd1 $00 ++0026aa c6aa: 3a .dd1 $3a ++0026ab c6ab: c4 .dd1 $c4 ++0026ac c6ac: d9 .dd1 $d9 ++0026ad c6ad: 47 .dd1 $47 ++0026ae c6ae: a5 .dd1 $a5 ++0026af c6af: b8 .dd1 $b8 ++0026b0 c6b0: 23 .dd1 $23 ++0026b1 c6b1: c2 .dd1 $c2 ++0026b2 c6b2: 9a .dd1 $9a ++0026b3 c6b3: d6 .dd1 $d6 ++0026b4 c6b4: e1 .dd1 $e1 ++0026b5 c6b5: 22 .dd1 $22 ++0026b6 c6b6: e5 d9 cd da+ .str ↑“eYMZQMQOAEM8OA” ++0026c4 c6c4: 3a .dd1 $3a ++0026c5 c6c5: e3 .dd1 $e3 ++0026c6 c6c6: d9 .dd1 $d9 ++0026c7 c6c7: 21 .dd1 $21 ++0026c8 c6c8: e1 d9 be da+ .str ↑“aY>ZRV” ++0026ce c6ce: 77 .dd1 $77 ++0026cf c6cf: 34 .dd1 $34 ++0026d0 c6d0: 0e .dd1 $0e ++0026d1 c6d1: 02 .dd1 $02 ++0026d2 c6d2: 0d .dd1 $0d ++0026d3 c6d3: 0d .dd1 $0d ++0026d4 c6d4: 21 .dd1 $21 ++0026d5 c6d5: df d6 f5 cd .str ↑“_VuM” ++0026d9 c6d9: 69 .dd1 $69 ++0026da c6da: d1 .dd1 $d1 ++0026db c6db: e6 .dd1 $e6 ++0026dc c6dc: 7f .dd1 $7f ++0026dd c6dd: 77 .dd1 $77 ++0026de c6de: f1 .dd1 $f1 ++0026df c6df: fe .dd1 $fe ++0026e0 c6e0: 7f .dd1 $7f ++0026e1 c6e1: c2 .dd1 $c2 ++0026e2 c6e2: 00 .dd1 $00 ++0026e3 c6e3: d7 .dd1 $d7 ++0026e4 c6e4: 3a .dd1 $3a ++0026e5 c6e5: d5 .dd1 $d5 ++0026e6 c6e6: d9 .dd1 $d9 ++0026e7 c6e7: fe .dd1 $fe ++0026e8 c6e8: 01 .dd1 $01 ++0026e9 c6e9: c2 .dd1 $c2 ++0026ea c6ea: 00 .dd1 $00 ++0026eb c6eb: d7 cd d2 d0+ .str ↑“WMRPM” ++0026f0 c6f0: 5a .dd1 $5a ++0026f1 c6f1: d5 .dd1 $d5 ++0026f2 c6f2: 21 .dd1 $21 ++0026f3 c6f3: 45 .dd1 $45 ++0026f4 c6f4: cf .dd1 $cf ++0026f5 c6f5: 7e .dd1 $7e ++0026f6 c6f6: b7 c2 fe d6 .str ↑“7B~V” ++0026fa c6fa: 3d .dd1 $3d ++0026fb c6fb: 32 .dd1 $32 ++0026fc c6fc: e3 .dd1 $e3 ++0026fd c6fd: d9 .dd1 $d9 ++0026fe c6fe: 36 .dd1 $36 ++0026ff c6ff: 00 .dd1 $00 ++002700 c700: c3 d2 d0 af .str ↑“CRP/” ++002704 c704: 32 .dd1 $32 ++002705 c705: d5 .dd1 $d5 ++002706 c706: d9 .dd1 $d9 ++002707 c707: c5 .dd1 $c5 ++002708 c708: 2a .dd1 $2a ++002709 c709: 43 .dd1 $43 ++00270a c70a: cf .dd1 $cf ++00270b c70b: eb .dd1 $eb ++00270c c70c: 21 .dd1 $21 ++00270d c70d: 21 .dd1 $21 ++00270e c70e: 00 .dd1 $00 ++00270f c70f: 19 .dd1 $19 ++002710 c710: 7e .dd1 $7e ++002711 c711: e6 .dd1 $e6 ++002712 c712: 7f .dd1 $7f ++002713 c713: f5 .dd1 $f5 ++002714 c714: 7e .dd1 $7e ++002715 c715: 17 .dd1 $17 ++002716 c716: 23 .dd1 $23 ++002717 c717: 7e .dd1 $7e ++002718 c718: 17 .dd1 $17 ++002719 c719: e6 .dd1 $e6 ++00271a c71a: 1f .dd1 $1f ++00271b c71b: 4f .dd1 $4f ++00271c c71c: 7e .dd1 $7e ++00271d c71d: 1f .dd1 $1f ++00271e c71e: 1f .dd1 $1f ++00271f c71f: 1f .dd1 $1f ++002720 c720: 1f .dd1 $1f ++002721 c721: e6 .dd1 $e6 ++002722 c722: 0f .dd1 $0f ++002723 c723: 47 .dd1 $47 ++002724 c724: f1 .dd1 $f1 ++002725 c725: 23 6e 2c 2d+ .str “#n,-.” ++00272a c72a: 06 .dd1 $06 ++00272b c72b: c2 .dd1 $c2 ++00272c c72c: 8b .dd1 $8b ++00272d c72d: d7 .dd1 $d7 ++00272e c72e: 21 .dd1 $21 ++00272f c72f: 20 .dd1 $20 ++002730 c730: 00 .dd1 $00 ++002731 c731: 19 .dd1 $19 ++002732 c732: 77 .dd1 $77 ++002733 c733: 21 .dd1 $21 ++002734 c734: 0c .dd1 $0c ++002735 c735: 00 .dd1 $00 ++002736 c736: 19 .dd1 $19 ++002737 c737: 79 .dd1 $79 ++002738 c738: 96 .dd1 $96 ++002739 c739: c2 .dd1 $c2 ++00273a c73a: 47 .dd1 $47 ++00273b c73b: d7 .dd1 $d7 ++00273c c73c: 21 .dd1 $21 ++00273d c73d: 0e .dd1 $0e ++00273e c73e: 00 .dd1 $00 ++00273f c73f: 19 .dd1 $19 ++002740 c740: 78 .dd1 $78 ++002741 c741: 96 .dd1 $96 ++002742 c742: e6 .dd1 $e6 ++002743 c743: 7f .dd1 $7f ++002744 c744: ca .dd1 $ca ++002745 c745: 7f .dd1 $7f ++002746 c746: d7 c5 d5 cd+ .str ↑“WEUM"TQA” ++00274e c74e: 2e .dd1 $2e ++00274f c74f: 03 .dd1 $03 ++002750 c750: 3a .dd1 $3a ++002751 c751: 45 .dd1 $45 ++002752 c752: cf .dd1 $cf ++002753 c753: 3c .dd1 $3c ++002754 c754: ca .dd1 $ca ++002755 c755: 84 .dd1 $84 ++002756 c756: d7 .dd1 $d7 ++002757 c757: 21 .dd1 $21 ++002758 c758: 0c .dd1 $0c ++002759 c759: 00 .dd1 $00 ++00275a c75a: 19 .dd1 $19 ++00275b c75b: 71 .dd1 $71 ++00275c c75c: 21 .dd1 $21 ++00275d c75d: 0e .dd1 $0e ++00275e c75e: 00 .dd1 $00 ++00275f c75f: 19 .dd1 $19 ++002760 c760: 70 .dd1 $70 ++002761 c761: cd .dd1 $cd ++002762 c762: 51 .dd1 $51 ++002763 c763: d4 .dd1 $d4 ++002764 c764: 3a .dd1 $3a ++002765 c765: 45 .dd1 $45 ++002766 c766: cf .dd1 $cf ++002767 c767: 3c .dd1 $3c ++002768 c768: c2 .dd1 $c2 ++002769 c769: 7f .dd1 $7f ++00276a c76a: d7 .dd1 $d7 ++00276b c76b: c1 .dd1 $c1 ++00276c c76c: c5 .dd1 $c5 ++00276d c76d: 2e .dd1 $2e ++00276e c76e: 04 .dd1 $04 ++00276f c76f: 0c .dd1 $0c ++002770 c770: ca .dd1 $ca ++002771 c771: 84 .dd1 $84 ++002772 c772: d7 .dd1 $d7 ++002773 c773: cd .dd1 $cd ++002774 c774: 24 .dd1 $24 ++002775 c775: d5 .dd1 $d5 ++002776 c776: 2e .dd1 $2e ++002777 c777: 05 .dd1 $05 ++002778 c778: 3a .dd1 $3a ++002779 c779: 45 .dd1 $45 ++00277a c77a: cf .dd1 $cf ++00277b c77b: 3c .dd1 $3c ++00277c c77c: ca .dd1 $ca ++00277d c77d: 84 .dd1 $84 ++00277e c77e: d7 c1 af c3 .str ↑“WA/C” ++002782 c782: 01 .dd1 $01 ++002783 c783: cf .dd1 $cf ++002784 c784: e5 .dd1 $e5 ++002785 c785: cd .dd1 $cd ++002786 c786: 69 .dd1 $69 ++002787 c787: d1 .dd1 $d1 ++002788 c788: 36 .dd1 $36 ++002789 c789: c0 .dd1 $c0 ++00278a c78a: e1 .dd1 $e1 ++00278b c78b: c1 .dd1 $c1 ++00278c c78c: 7d .dd1 $7d ++00278d c78d: 32 .dd1 $32 ++00278e c78e: 45 .dd1 $45 ++00278f c78f: cf .dd1 $cf ++002790 c790: c3 .dd1 $c3 ++002791 c791: 78 .dd1 $78 ++002792 c792: d1 .dd1 $d1 ++002793 c793: 0e .dd1 $0e ++002794 c794: ff .dd1 $ff ++002795 c795: cd .dd1 $cd ++002796 c796: 03 .dd1 $03 ++002797 c797: d7 cc c1 d5+ .str ↑“WLAUI” ++00279c c79c: 0e .dd1 $0e ++00279d c79d: 00 .dd1 $00 ++00279e c79e: cd .dd1 $cd ++00279f c79f: 03 .dd1 $03 ++0027a0 c7a0: d7 .dd1 $d7 ++0027a1 c7a1: cc .dd1 $cc ++0027a2 c7a2: 03 .dd1 $03 ++0027a3 c7a3: d6 .dd1 $d6 ++0027a4 c7a4: c9 .dd1 $c9 ++0027a5 c7a5: eb .dd1 $eb ++0027a6 c7a6: 19 .dd1 $19 ++0027a7 c7a7: 4e .dd1 $4e ++0027a8 c7a8: 06 .dd1 $06 ++0027a9 c7a9: 00 .dd1 $00 ++0027aa c7aa: 21 .dd1 $21 ++0027ab c7ab: 0c .dd1 $0c ++0027ac c7ac: 00 .dd1 $00 ++0027ad c7ad: 19 .dd1 $19 ++0027ae c7ae: 7e .dd1 $7e ++0027af c7af: 0f .dd1 $0f ++0027b0 c7b0: e6 .dd1 $e6 ++0027b1 c7b1: 80 .dd1 $80 ++0027b2 c7b2: 81 .dd1 $81 ++0027b3 c7b3: 4f .dd1 $4f ++0027b4 c7b4: 3e .dd1 $3e ++0027b5 c7b5: 00 .dd1 $00 ++0027b6 c7b6: 88 .dd1 $88 ++0027b7 c7b7: 47 .dd1 $47 ++0027b8 c7b8: 7e .dd1 $7e ++0027b9 c7b9: 0f .dd1 $0f ++0027ba c7ba: e6 .dd1 $e6 ++0027bb c7bb: 0f .dd1 $0f ++0027bc c7bc: 80 .dd1 $80 ++0027bd c7bd: 47 .dd1 $47 ++0027be c7be: 21 .dd1 $21 ++0027bf c7bf: 0e .dd1 $0e ++0027c0 c7c0: 00 .dd1 $00 ++0027c1 c7c1: 19 .dd1 $19 ++0027c2 c7c2: 7e .dd1 $7e ++0027c3 c7c3: 87 87 87 87+ .str ↑$87,$87,$87,$87,“u” ++0027c8 c7c8: 80 .dd1 $80 ++0027c9 c7c9: 47 .dd1 $47 ++0027ca c7ca: f5 .dd1 $f5 ++0027cb c7cb: e1 .dd1 $e1 ++0027cc c7cc: 7d .dd1 $7d ++0027cd c7cd: e1 .dd1 $e1 ++0027ce c7ce: b5 .dd1 $b5 ++0027cf c7cf: e6 .dd1 $e6 ++0027d0 c7d0: 01 .dd1 $01 ++0027d1 c7d1: c9 .dd1 $c9 ++0027d2 c7d2: 0e .dd1 $0e ++0027d3 c7d3: 0c .dd1 $0c ++0027d4 c7d4: cd .dd1 $cd ++0027d5 c7d5: 18 .dd1 $18 ++0027d6 c7d6: d3 .dd1 $d3 ++0027d7 c7d7: 2a .dd1 $2a ++0027d8 c7d8: 43 .dd1 $43 ++0027d9 c7d9: cf .dd1 $cf ++0027da c7da: 11 .dd1 $11 ++0027db c7db: 21 .dd1 $21 ++0027dc c7dc: 00 .dd1 $00 ++0027dd c7dd: 19 .dd1 $19 ++0027de c7de: e5 .dd1 $e5 ++0027df c7df: 72 23 72 23+ .str “r#r#r” ++0027e4 c7e4: cd f5 d1 ca .str ↑“MuQJ” ++0027e8 c7e8: 0c .dd1 $0c ++0027e9 c7e9: d8 .dd1 $d8 ++0027ea c7ea: cd .dd1 $cd ++0027eb c7eb: 5e .dd1 $5e ++0027ec c7ec: d1 .dd1 $d1 ++0027ed c7ed: 11 .dd1 $11 ++0027ee c7ee: 0f .dd1 $0f ++0027ef c7ef: 00 .dd1 $00 ++0027f0 c7f0: cd a5 d7 e1+ .str ↑“M%Wae” ++0027f5 c7f5: 5f .dd1 $5f ++0027f6 c7f6: 79 .dd1 $79 ++0027f7 c7f7: 96 .dd1 $96 ++0027f8 c7f8: 23 .dd1 $23 ++0027f9 c7f9: 78 .dd1 $78 ++0027fa c7fa: 9e .dd1 $9e ++0027fb c7fb: 23 .dd1 $23 ++0027fc c7fc: 7b .dd1 $7b ++0027fd c7fd: 9e .dd1 $9e ++0027fe c7fe: da .dd1 $da ++0027ff c7ff: 06 .dd1 $06 ++002800 c800: d8 .dd1 $d8 ++002801 c801: 73 2b 70 2b+ .str “s+p+q” ++002806 c806: cd .dd1 $cd ++002807 c807: 2d .dd1 $2d ++002808 c808: d3 c3 e4 d7+ .str ↑“SCdWaI” ++00280e c80e: 2a .dd1 $2a ++00280f c80f: 43 .dd1 $43 ++002810 c810: cf .dd1 $cf ++002811 c811: 11 .dd1 $11 ++002812 c812: 20 .dd1 $20 ++002813 c813: 00 .dd1 $00 ++002814 c814: cd .dd1 $cd ++002815 c815: a5 .dd1 $a5 ++002816 c816: d7 .dd1 $d7 ++002817 c817: 21 .dd1 $21 ++002818 c818: 21 .dd1 $21 ++002819 c819: 00 .dd1 $00 ++00281a c81a: 19 .dd1 $19 ++00281b c81b: 71 23 70 23+ .str “q#p#w” ++002820 c820: c9 .dd1 $c9 ++002821 c821: 2a .dd1 $2a ++002822 c822: af .dd1 $af ++002823 c823: d9 .dd1 $d9 ++002824 c824: 3a .dd1 $3a ++002825 c825: 42 .dd1 $42 ++002826 c826: cf .dd1 $cf ++002827 c827: 4f .dd1 $4f ++002828 c828: cd ea d0 e5+ .str ↑“MjPekM” ++00282e c82e: 59 .dd1 $59 ++00282f c82f: cf .dd1 $cf ++002830 c830: e1 .dd1 $e1 ++002831 c831: cc .dd1 $cc ++002832 c832: 47 .dd1 $47 ++002833 c833: cf .dd1 $cf ++002834 c834: 7d .dd1 $7d ++002835 c835: 1f .dd1 $1f ++002836 c836: d8 .dd1 $d8 ++002837 c837: 2a .dd1 $2a ++002838 c838: af .dd1 $af ++002839 c839: d9 .dd1 $d9 ++00283a c83a: 4d .dd1 $4d ++00283b c83b: 44 .dd1 $44 ++00283c c83c: cd .dd1 $cd ++00283d c83d: 0b .dd1 $0b ++00283e c83e: d1 .dd1 $d1 ++00283f c83f: 22 .dd1 $22 ++002840 c840: af d9 c3 a3+ .str ↑“/YC#R” ++002845 c845: 3a .dd1 $3a ++002846 c846: d6 .dd1 $d6 ++002847 c847: d9 .dd1 $d9 ++002848 c848: 21 .dd1 $21 ++002849 c849: 42 .dd1 $42 ++00284a c84a: cf .dd1 $cf ++00284b c84b: be .dd1 $be ++00284c c84c: c8 .dd1 $c8 ++00284d c84d: 77 .dd1 $77 ++00284e c84e: c3 .dd1 $c3 ++00284f c84f: 21 .dd1 $21 ++002850 c850: d8 .dd1 $d8 ++002851 c851: 3e .dd1 $3e ++002852 c852: ff .dd1 $ff ++002853 c853: 32 .dd1 $32 ++002854 c854: de .dd1 $de ++002855 c855: d9 .dd1 $d9 ++002856 c856: 2a .dd1 $2a ++002857 c857: 43 .dd1 $43 ++002858 c858: cf .dd1 $cf ++002859 c859: 7e .dd1 $7e ++00285a c85a: e6 .dd1 $e6 ++00285b c85b: 1f .dd1 $1f ++00285c c85c: 3d .dd1 $3d ++00285d c85d: 32 .dd1 $32 ++00285e c85e: d6 .dd1 $d6 ++00285f c85f: d9 .dd1 $d9 ++002860 c860: fe .dd1 $fe ++002861 c861: 1e .dd1 $1e ++002862 c862: d2 .dd1 $d2 ++002863 c863: 75 .dd1 $75 ++002864 c864: d8 .dd1 $d8 ++002865 c865: 3a .dd1 $3a ++002866 c866: 42 .dd1 $42 ++002867 c867: cf .dd1 $cf ++002868 c868: 32 .dd1 $32 ++002869 c869: df .dd1 $df ++00286a c86a: d9 .dd1 $d9 ++00286b c86b: 7e .dd1 $7e ++00286c c86c: 32 .dd1 $32 ++00286d c86d: e0 d9 e6 e0 .str ↑“`Yf`” ++002871 c871: 77 .dd1 $77 ++002872 c872: cd .dd1 $cd ++002873 c873: 45 .dd1 $45 ++002874 c874: d8 .dd1 $d8 ++002875 c875: 3a .dd1 $3a ++002876 c876: 41 .dd1 $41 ++002877 c877: cf .dd1 $cf ++002878 c878: 2a .dd1 $2a ++002879 c879: 43 .dd1 $43 ++00287a c87a: cf .dd1 $cf ++00287b c87b: b6 .dd1 $b6 ++00287c c87c: 77 .dd1 $77 ++00287d c87d: c9 .dd1 $c9 ++00287e c87e: 3e .dd1 $3e ++00287f c87f: 22 .dd1 $22 ++002880 c880: c3 .dd1 $c3 ++002881 c881: 01 .dd1 $01 ++002882 c882: cf .dd1 $cf ++002883 c883: 21 .dd1 $21 ++002884 c884: 00 .dd1 $00 ++002885 c885: 00 .dd1 $00 ++002886 c886: 22 .dd1 $22 ++002887 c887: ad .dd1 $ad ++002888 c888: d9 .dd1 $d9 ++002889 c889: 22 .dd1 $22 ++00288a c88a: af .dd1 $af ++00288b c88b: d9 .dd1 $d9 ++00288c c88c: af .dd1 $af ++00288d c88d: 32 .dd1 $32 ++00288e c88e: 42 .dd1 $42 ++00288f c88f: cf .dd1 $cf ++002890 c890: 21 .dd1 $21 ++002891 c891: 80 .dd1 $80 ++002892 c892: 00 .dd1 $00 ++002893 c893: 22 .dd1 $22 ++002894 c894: b1 d9 cd da+ .str ↑“1YMZQC” ++00289a c89a: 21 .dd1 $21 ++00289b c89b: d8 .dd1 $d8 ++00289c c89c: cd .dd1 $cd ++00289d c89d: 72 .dd1 $72 ++00289e c89e: d1 .dd1 $d1 ++00289f c89f: cd .dd1 $cd ++0028a0 c8a0: 51 .dd1 $51 ++0028a1 c8a1: d8 .dd1 $d8 ++0028a2 c8a2: c3 .dd1 $c3 ++0028a3 c8a3: 51 .dd1 $51 ++0028a4 c8a4: d4 .dd1 $d4 ++0028a5 c8a5: cd .dd1 $cd ++0028a6 c8a6: 51 .dd1 $51 ++0028a7 c8a7: d8 c3 a2 d4 .str ↑“XC"T” ++0028ab c8ab: 0e .dd1 $0e ++0028ac c8ac: 00 .dd1 $00 ++0028ad c8ad: eb .dd1 $eb ++0028ae c8ae: 7e .dd1 $7e ++0028af c8af: fe .dd1 $fe ++0028b0 c8b0: 3f .dd1 $3f ++0028b1 c8b1: ca c2 d8 cd+ .str ↑“JBXM&P” ++0028b7 c8b7: 7e .dd1 $7e ++0028b8 c8b8: fe .dd1 $fe ++0028b9 c8b9: 3f .dd1 $3f ++0028ba c8ba: c4 .dd1 $c4 ++0028bb c8bb: 72 .dd1 $72 ++0028bc c8bc: d1 .dd1 $d1 ++0028bd c8bd: cd .dd1 $cd ++0028be c8be: 51 .dd1 $51 ++0028bf c8bf: d8 .dd1 $d8 ++0028c0 c8c0: 0e .dd1 $0e ++0028c1 c8c1: 0f .dd1 $0f ++0028c2 c8c2: cd .dd1 $cd ++0028c3 c8c3: 18 .dd1 $18 ++0028c4 c8c4: d3 c3 e9 d1 .str ↑“SCiQ” ++0028c8 c8c8: 2a .dd1 $2a ++0028c9 c8c9: d9 .dd1 $d9 ++0028ca c8ca: d9 .dd1 $d9 ++0028cb c8cb: 22 .dd1 $22 ++0028cc c8cc: 43 .dd1 $43 ++0028cd c8cd: cf .dd1 $cf ++0028ce c8ce: cd .dd1 $cd ++0028cf c8cf: 51 .dd1 $51 ++0028d0 c8d0: d8 .dd1 $d8 ++0028d1 c8d1: cd .dd1 $cd ++0028d2 c8d2: 2d .dd1 $2d ++0028d3 c8d3: d3 c3 e9 d1+ .str ↑“SCiQM” ++0028d8 c8d8: 51 .dd1 $51 ++0028d9 c8d9: d8 .dd1 $d8 ++0028da c8da: cd .dd1 $cd ++0028db c8db: 9c .dd1 $9c ++0028dc c8dc: d3 .dd1 $d3 ++0028dd c8dd: c3 .dd1 $c3 ++0028de c8de: 01 .dd1 $01 ++0028df c8df: d3 .dd1 $d3 ++0028e0 c8e0: cd .dd1 $cd ++0028e1 c8e1: 51 .dd1 $51 ++0028e2 c8e2: d8 c3 bc d5+ .str ↑“XCP2K” ++002ba9 cba9: de .dd1 $de ++002baa cbaa: c9 .dd1 $c9 ++002bab cbab: 16 .dd1 $16 ++002bac cbac: 03 .dd1 $03 ++002bad cbad: 21 .dd1 $21 ++002bae cbae: 16 .dd1 $16 ++002baf cbaf: 02 .dd1 $02 ++002bb0 cbb0: 1e .dd1 $1e ++002bb1 cbb1: 01 .dd1 $01 ++002bb2 cbb2: 21 .dd1 $21 ++002bb3 cbb3: 4c .dd1 $4c ++002bb4 cbb4: de .dd1 $de ++002bb5 cbb5: 71 .dd1 $71 ++002bb6 cbb6: 26 .dd1 $26 ++002bb7 cbb7: fe .dd1 $fe ++002bb8 cbb8: 22 .dd1 $22 ++002bb9 cbb9: a2 .dd1 $a2 ++002bba cbba: df .dd1 $df ++002bbb cbbb: 21 .dd1 $21 ++002bbc cbbc: 01 .dd1 $01 ++002bbd cbbd: 00 .dd1 $00 ++002bbe cbbe: 22 .dd1 $22 ++002bbf cbbf: a4 .dd1 $a4 ++002bc0 cbc0: df .dd1 $df ++002bc1 cbc1: 21 .dd1 $21 ++002bc2 cbc2: 06 .dd1 $06 ++002bc3 cbc3: 1b .dd1 $1b ++002bc4 cbc4: ed .dd1 $ed ++002bc5 cbc5: 53 .dd1 $53 ++002bc6 cbc6: a0 .dd1 $a0 ++002bc7 cbc7: df .dd1 $df ++002bc8 cbc8: 18 .dd1 $18 ++002bc9 cbc9: 06 .dd1 $06 ++002bca cbca: 22 .dd1 $22 ++002bcb cbcb: a0 .dd1 $a0 ++002bcc cbcc: df .dd1 $df ++002bcd cbcd: 21 .dd1 $21 ++002bce cbce: 21 .dd1 $21 ++002bcf cbcf: 1b .dd1 $1b ++002bd0 cbd0: 22 .dd1 $22 ++002bd1 cbd1: 90 .dd1 $90 ++002bd2 cbd2: df .dd1 $df ++002bd3 cbd3: af .dd1 $af ++002bd4 cbd4: 32 .dd1 $32 ++002bd5 cbd5: 92 .dd1 $92 ++002bd6 cbd6: df .dd1 $df ++002bd7 cbd7: d3 .dd1 $d3 ++002bd8 cbd8: 00 .dd1 $00 ++002bd9 cbd9: c9 .dd1 $c9 ++002bda cbda: cd .dd1 $cd ++002bdb cbdb: 0d .dd1 $0d ++002bdc cbdc: dc .dd1 $dc ++002bdd cbdd: 67 .dd1 $67 ++002bde cbde: 6f .dd1 $6f ++002bdf cbdf: c8 .dd1 $c8 ++002be0 cbe0: 79 .dd1 $79 ++002be1 cbe1: 32 .dd1 $32 ++002be2 cbe2: 2b .dd1 $2b ++002be3 cbe3: df .dd1 $df ++002be4 cbe4: 21 .dd1 $21 ++002be5 cbe5: 9f .dd1 $9f ++002be6 cbe6: de 87 87 87+ .str ↑“^”,$87,$87,$87,$87 ++002beb cbeb: 85 .dd1 $85 ++002bec cbec: 6f .dd1 $6f ++002bed cbed: e5 .dd1 $e5 ++002bee cbee: 11 .dd1 $11 ++002bef cbef: 0a .dd1 $0a ++002bf0 cbf0: 00 .dd1 $00 ++002bf1 cbf1: 19 .dd1 $19 ++002bf2 cbf2: 7e 23 66 6f+ .str “~#fo##F>” ++002bfa cbfa: 01 .dd1 $01 ++002bfb cbfb: 8f .dd1 $8f ++002bfc cbfc: 10 .dd1 $10 ++002bfd cbfd: fd .dd1 $fd ++002bfe cbfe: 32 .dd1 $32 ++002bff cbff: 4d .dd1 $4d ++002c00 cc00: dc .dd1 $dc ++002c01 cc01: e1 .dd1 $e1 ++002c02 cc02: 3a .dd1 $3a ++002c03 cc03: 04 .dd1 $04 ++002c04 cc04: 00 .dd1 $00 ++002c05 cc05: 32 .dd1 $32 ++002c06 cc06: 33 .dd1 $33 ++002c07 cc07: df .dd1 $df ++002c08 cc08: c9 .dd1 $c9 ++002c09 cc09: 3a .dd1 $3a ++002c0a cc0a: 2b .dd1 $2b ++002c0b cc0b: df .dd1 $df ++002c0c cc0c: 4f .dd1 $4f ++002c0d cc0d: 21 .dd1 $21 ++002c0e cc0e: c0 .dd1 $c0 ++002c0f cc0f: df .dd1 $df ++002c10 cc10: 06 .dd1 $06 ++002c11 cc11: 00 .dd1 $00 ++002c12 cc12: 09 .dd1 $09 ++002c13 cc13: 7e .dd1 $7e ++002c14 cc14: b7 .dd1 $b7 ++002c15 cc15: c9 .dd1 $c9 ++002c16 cc16: 3a .dd1 $3a ++002c17 cc17: 35 .dd1 $35 ++002c18 cc18: df .dd1 $df ++002c19 cc19: b7 .dd1 $b7 ++002c1a cc1a: 20 .dd1 $20 ++002c1b cc1b: 03 .dd1 $03 ++002c1c cc1c: 32 .dd1 $32 ++002c1d cc1d: 34 .dd1 $34 ++002c1e cc1e: df .dd1 $df ++002c1f cc1f: 01 .dd1 $01 ++002c20 cc20: 00 .dd1 $00 ++002c21 cc21: 00 .dd1 $00 ++002c22 cc22: ed .dd1 $ed ++002c23 cc23: 43 .dd1 $43 ++002c24 cc24: 2f .dd1 $2f ++002c25 cc25: df .dd1 $df ++002c26 cc26: c9 .dd1 $c9 ++002c27 cc27: 79 .dd1 $79 ++002c28 cc28: 32 .dd1 $32 ++002c29 cc29: 2d .dd1 $2d ++002c2a cc2a: df .dd1 $df ++002c2b cc2b: c9 .dd1 $c9 ++002c2c cc2c: ed .dd1 $ed ++002c2d cc2d: 43 .dd1 $43 ++002c2e cc2e: 3e .dd1 $3e ++002c2f cc2f: df .dd1 $df ++002c30 cc30: c9 .dd1 $c9 ++002c31 cc31: af .dd1 $af ++002c32 cc32: 32 .dd1 $32 ++002c33 cc33: 39 .dd1 $39 ++002c34 cc34: df .dd1 $df ++002c35 cc35: 3e .dd1 $3e ++002c36 cc36: 02 .dd1 $02 ++002c37 cc37: 21 .dd1 $21 ++002c38 cc38: 36 .dd1 $36 ++002c39 cc39: df .dd1 $df ++002c3a cc3a: 77 23 77 23+ .str “w#w#w” ++002c3f cc3f: 18 .dd1 $18 ++002c40 cc40: 4f .dd1 $4f ++002c41 cc41: 61 .dd1 $61 ++002c42 cc42: 2e .dd1 $2e ++002c43 cc43: 00 .dd1 $00 ++002c44 cc44: 22 .dd1 $22 ++002c45 cc45: 36 .dd1 $36 ++002c46 cc46: df .dd1 $df ++002c47 cc47: 79 .dd1 $79 ++002c48 cc48: fe .dd1 $fe ++002c49 cc49: 02 .dd1 $02 ++002c4a cc4a: 20 .dd1 $20 ++002c4b cc4b: 15 .dd1 $15 ++002c4c cc4c: 2e .dd1 $2e ++002c4d cc4d: 08 .dd1 $08 ++002c4e cc4e: 3a .dd1 $3a ++002c4f cc4f: 2b .dd1 $2b ++002c50 cc50: df .dd1 $df ++002c51 cc51: 67 .dd1 $67 ++002c52 cc52: 22 .dd1 $22 ++002c53 cc53: 39 .dd1 $39 ++002c54 cc54: df .dd1 $df ++002c55 cc55: 2a .dd1 $2a ++002c56 cc56: 2f .dd1 $2f ++002c57 cc57: df .dd1 $df ++002c58 cc58: 22 .dd1 $22 ++002c59 cc59: 3b .dd1 $3b ++002c5a cc5a: df .dd1 $df ++002c5b cc5b: 3a .dd1 $3a ++002c5c cc5c: 2d .dd1 $2d ++002c5d cc5d: df .dd1 $df ++002c5e cc5e: 32 .dd1 $32 ++002c5f cc5f: 3d .dd1 $3d ++002c60 cc60: df .dd1 $df ++002c61 cc61: 21 .dd1 $21 ++002c62 cc62: 39 .dd1 $39 ++002c63 cc63: df .dd1 $df ++002c64 cc64: 7e .dd1 $7e ++002c65 cc65: b7 .dd1 $b7 ++002c66 cc66: 28 22 35 3a+ .str “("5:+” ++002c6b cc6b: df .dd1 $df ++002c6c cc6c: 23 .dd1 $23 ++002c6d cc6d: be .dd1 $be ++002c6e cc6e: 20 .dd1 $20 ++002c6f cc6f: 1a .dd1 $1a ++002c70 cc70: 2a .dd1 $2a ++002c71 cc71: 2f .dd1 $2f ++002c72 cc72: df .dd1 $df ++002c73 cc73: ed .dd1 $ed ++002c74 cc74: 5b .dd1 $5b ++002c75 cc75: 3b .dd1 $3b ++002c76 cc76: df .dd1 $df ++002c77 cc77: ed .dd1 $ed ++002c78 cc78: 52 .dd1 $52 ++002c79 cc79: 20 .dd1 $20 ++002c7a cc7a: 0f .dd1 $0f ++002c7b cc7b: 3a .dd1 $3a ++002c7c cc7c: 2d .dd1 $2d ++002c7d cc7d: df .dd1 $df ++002c7e cc7e: 21 .dd1 $21 ++002c7f cc7f: 3d .dd1 $3d ++002c80 cc80: df .dd1 $df ++002c81 cc81: 96 .dd1 $96 ++002c82 cc82: 20 .dd1 $20 ++002c83 cc83: 06 .dd1 $06 ++002c84 cc84: 34 .dd1 $34 ++002c85 cc85: 32 .dd1 $32 ++002c86 cc86: 38 .dd1 $38 ++002c87 cc87: df .dd1 $df ++002c88 cc88: 18 .dd1 $18 ++002c89 cc89: 06 .dd1 $06 ++002c8a cc8a: 21 .dd1 $21 ++002c8b cc8b: 01 .dd1 $01 ++002c8c cc8c: 00 .dd1 $00 ++002c8d cc8d: 22 .dd1 $22 ++002c8e cc8e: 38 .dd1 $38 ++002c8f cc8f: df .dd1 $df ++002c90 cc90: 3a .dd1 $3a ++002c91 cc91: 85 .dd1 $85 ++002c92 cc92: db .dd1 $db ++002c93 cc93: cd .dd1 $cd ++002c94 cc94: 09 .dd1 $09 ++002c95 cc95: dc .dd1 $dc ++002c96 cc96: 3a .dd1 $3a ++002c97 cc97: 2d .dd1 $2d ++002c98 cc98: df .dd1 $df ++002c99 cc99: fa .dd1 $fa ++002c9a cc9a: 9e .dd1 $9e ++002c9b cc9b: dc .dd1 $dc ++002c9c cc9c: cb .dd1 $cb ++002c9d cc9d: 3f .dd1 $3f ++002c9e cc9e: cb .dd1 $cb ++002c9f cc9f: 3f 57 21 34 .str “?W!4” ++002ca3 cca3: df .dd1 $df ++002ca4 cca4: 7e .dd1 $7e ++002ca5 cca5: 74 .dd1 $74 ++002ca6 cca6: b7 .dd1 $b7 ++002ca7 cca7: 28 .dd1 $28 ++002ca8 cca8: 1f .dd1 $1f ++002ca9 cca9: 2a .dd1 $2a ++002caa ccaa: 2b .dd1 $2b ++002cab ccab: df .dd1 $df ++002cac ccac: 7d .dd1 $7d ++002cad ccad: bc .dd1 $bc ++002cae ccae: 20 .dd1 $20 ++002caf ccaf: 11 .dd1 $11 ++002cb0 ccb0: 2a .dd1 $2a ++002cb1 ccb1: 31 .dd1 $31 ++002cb2 ccb2: df .dd1 $df ++002cb3 ccb3: ed .dd1 $ed ++002cb4 ccb4: 4b .dd1 $4b ++002cb5 ccb5: 2f .dd1 $2f ++002cb6 ccb6: df .dd1 $df ++002cb7 ccb7: ed .dd1 $ed ++002cb8 ccb8: 42 .dd1 $42 ++002cb9 ccb9: 20 .dd1 $20 ++002cba ccba: 06 .dd1 $06 ++002cbb ccbb: 3a .dd1 $3a ++002cbc ccbc: 2e .dd1 $2e ++002cbd ccbd: df .dd1 $df ++002cbe ccbe: ba .dd1 $ba ++002cbf ccbf: 28 22 3a 35 .str “(":5” ++002cc3 ccc3: df .dd1 $df ++002cc4 ccc4: b7 .dd1 $b7 ++002cc5 ccc5: c4 .dd1 $c4 ++002cc6 ccc6: 1a .dd1 $1a ++002cc7 ccc7: dd .dd1 $dd ++002cc8 ccc8: 3a .dd1 $3a ++002cc9 ccc9: 2b .dd1 $2b ++002cca ccca: df .dd1 $df ++002ccb cccb: 32 .dd1 $32 ++002ccc cccc: 2c .dd1 $2c ++002ccd cccd: df .dd1 $df ++002cce ccce: 2a .dd1 $2a ++002ccf cccf: 2f .dd1 $2f ++002cd0 ccd0: df .dd1 $df ++002cd1 ccd1: 22 .dd1 $22 ++002cd2 ccd2: 31 .dd1 $31 ++002cd3 ccd3: df .dd1 $df ++002cd4 ccd4: 7a .dd1 $7a ++002cd5 ccd5: 32 .dd1 $32 ++002cd6 ccd6: 2e .dd1 $2e ++002cd7 ccd7: df .dd1 $df ++002cd8 ccd8: 3a .dd1 $3a ++002cd9 ccd9: 38 .dd1 $38 ++002cda ccda: df .dd1 $df ++002cdb ccdb: b7 .dd1 $b7 ++002cdc ccdc: c4 .dd1 $c4 ++002cdd ccdd: 21 .dd1 $21 ++002cde ccde: dd .dd1 $dd ++002cdf ccdf: af .dd1 $af ++002ce0 cce0: 32 .dd1 $32 ++002ce1 cce1: 35 .dd1 $35 ++002ce2 cce2: df .dd1 $df ++002ce3 cce3: 3a .dd1 $3a ++002ce4 cce4: 2d .dd1 $2d ++002ce5 cce5: df .dd1 $df ++002ce6 cce6: 11 .dd1 $11 ++002ce7 cce7: 00 .dd1 $00 ++002ce8 cce8: 00 .dd1 $00 ++002ce9 cce9: 1f .dd1 $1f ++002cea ccea: cb .dd1 $cb ++002ceb cceb: 1b .dd1 $1b ++002cec ccec: 1f .dd1 $1f ++002ced cced: cb .dd1 $cb ++002cee ccee: 12 .dd1 $12 ++002cef ccef: cd .dd1 $cd ++002cf0 ccf0: 09 .dd1 $09 ++002cf1 ccf1: dc f2 f7 dc .str ↑“\rw\” ++002cf5 ccf5: 16 .dd1 $16 ++002cf6 ccf6: 00 .dd1 $00 ++002cf7 ccf7: 21 .dd1 $21 ++002cf8 ccf8: 00 .dd1 $00 ++002cf9 ccf9: e0 .dd1 $e0 ++002cfa ccfa: 19 .dd1 $19 ++002cfb ccfb: ed .dd1 $ed ++002cfc ccfc: 5b .dd1 $5b ++002cfd ccfd: 3e .dd1 $3e ++002cfe ccfe: df .dd1 $df ++002cff ccff: 01 .dd1 $01 ++002d00 cd00: 80 .dd1 $80 ++002d01 cd01: 00 .dd1 $00 ++002d02 cd02: 3a .dd1 $3a ++002d03 cd03: 36 .dd1 $36 ++002d04 cd04: df .dd1 $df ++002d05 cd05: b7 .dd1 $b7 ++002d06 cd06: 20 .dd1 $20 ++002d07 cd07: 05 .dd1 $05 ++002d08 cd08: 3c .dd1 $3c ++002d09 cd09: 32 .dd1 $32 ++002d0a cd0a: 35 .dd1 $35 ++002d0b cd0b: df eb ed b0 .str ↑“_km0” ++002d0f cd0f: 3a .dd1 $3a ++002d10 cd10: 37 .dd1 $37 ++002d11 cd11: df .dd1 $df ++002d12 cd12: 1f .dd1 $1f ++002d13 cd13: 3e .dd1 $3e ++002d14 cd14: 00 .dd1 $00 ++002d15 cd15: d0 .dd1 $d0 ++002d16 cd16: cd .dd1 $cd ++002d17 cd17: 1a .dd1 $1a ++002d18 cd18: dd .dd1 $dd ++002d19 cd19: c9 .dd1 $c9 ++002d1a cd1a: af .dd1 $af ++002d1b cd1b: 32 .dd1 $32 ++002d1c cd1c: 35 .dd1 $35 ++002d1d cd1d: df .dd1 $df ++002d1e cd1e: 1e .dd1 $1e ++002d1f cd1f: 02 .dd1 $02 ++002d20 cd20: 21 .dd1 $21 ++002d21 cd21: 1e .dd1 $1e ++002d22 cd22: 01 .dd1 $01 ++002d23 cd23: 3a .dd1 $3a ++002d24 cd24: 2c .dd1 $2c ++002d25 cd25: df .dd1 $df ++002d26 cd26: cd .dd1 $cd ++002d27 cd27: 0c .dd1 $0c ++002d28 cd28: dc .dd1 $dc ++002d29 cd29: f2 .dd1 $f2 ++002d2a cd2a: 5f .dd1 $5f ++002d2b cd2b: dd .dd1 $dd ++002d2c cd2c: e6 .dd1 $e6 ++002d2d cd2d: 7f .dd1 $7f ++002d2e cd2e: 32 .dd1 $32 ++002d2f cd2f: da .dd1 $da ++002d30 cd30: df .dd1 $df ++002d31 cd31: 7b .dd1 $7b ++002d32 cd32: 32 .dd1 $32 ++002d33 cd33: de .dd1 $de ++002d34 cd34: df .dd1 $df ++002d35 cd35: 3a .dd1 $3a ++002d36 cd36: 31 .dd1 $31 ++002d37 cd37: df .dd1 $df ++002d38 cd38: fe .dd1 $fe ++002d39 cd39: 23 .dd1 $23 ++002d3a cd3a: 38 .dd1 $38 ++002d3b cd3b: 02 .dd1 $02 ++002d3c cd3c: d6 .dd1 $d6 ++002d3d cd3d: 23 .dd1 $23 ++002d3e cd3e: 32 .dd1 $32 ++002d3f cd3f: d8 .dd1 $d8 ++002d40 cd40: df .dd1 $df ++002d41 cd41: 3a .dd1 $3a ++002d42 cd42: 2e .dd1 $2e ++002d43 cd43: df .dd1 $df ++002d44 cd44: 21 .dd1 $21 ++002d45 cd45: ee .dd1 $ee ++002d46 cd46: de .dd1 $de ++002d47 cd47: 85 .dd1 $85 ++002d48 cd48: 6f .dd1 $6f ++002d49 cd49: 7e .dd1 $7e ++002d4a cd4a: 32 .dd1 $32 ++002d4b cd4b: d9 .dd1 $d9 ++002d4c cd4c: df .dd1 $df ++002d4d cd4d: 21 .dd1 $21 ++002d4e cd4e: 00 .dd1 $00 ++002d4f cd4f: 10 .dd1 $10 ++002d50 cd50: 22 .dd1 $22 ++002d51 cd51: db .dd1 $db ++002d52 cd52: df .dd1 $df ++002d53 cd53: af .dd1 $af ++002d54 cd54: 32 .dd1 $32 ++002d55 cd55: dd .dd1 $dd ++002d56 cd56: df .dd1 $df ++002d57 cd57: 21 .dd1 $21 ++002d58 cd58: b0 .dd1 $b0 ++002d59 cd59: 19 .dd1 $19 ++002d5a cd5a: cd .dd1 $cd ++002d5b cd5b: d0 .dd1 $d0 ++002d5c cd5c: db .dd1 $db ++002d5d cd5d: 18 .dd1 $18 ++002d5e cd5e: 22 4f 2a 31 .str “"O*1” ++002d62 cd62: df .dd1 $df ++002d63 cd63: 29 29 29 29+ .str “)))):.” ++002d69 cd69: df .dd1 $df ++002d6a cd6a: b5 .dd1 $b5 ++002d6b cd6b: 6f .dd1 $6f ++002d6c cd6c: 22 .dd1 $22 ++002d6d cd6d: a6 .dd1 $a6 ++002d6e cd6e: df .dd1 $df ++002d6f cd6f: 21 .dd1 $21 ++002d70 cd70: 00 .dd1 $00 ++002d71 cd71: 02 .dd1 $02 ++002d72 cd72: 22 .dd1 $22 ++002d73 cd73: a4 .dd1 $a4 ++002d74 cd74: df .dd1 $df ++002d75 cd75: 21 .dd1 $21 ++002d76 cd76: 00 .dd1 $00 ++002d77 cd77: 10 .dd1 $10 ++002d78 cd78: 22 .dd1 $22 ++002d79 cd79: a2 .dd1 $a2 ++002d7a cd7a: df .dd1 $df ++002d7b cd7b: 61 .dd1 $61 ++002d7c cd7c: 6b .dd1 $6b ++002d7d cd7d: 2d .dd1 $2d ++002d7e cd7e: cd .dd1 $cd ++002d7f cd7f: ca .dd1 $ca ++002d80 cd80: db .dd1 $db ++002d81 cd81: 3a .dd1 $3a ++002d82 cd82: 98 .dd1 $98 ++002d83 cd83: df b7 c8 d1+ .str ↑“_7HQ~” ++002d88 cd88: 2b .dd1 $2b ++002d89 cd89: c0 .dd1 $c0 ++002d8a cd8a: 2a .dd1 $2a ++002d8b cd8b: 0d .dd1 $0d ++002d8c cd8c: cc .dd1 $cc ++002d8d cd8d: e9 .dd1 $e9 ++002d8e cd8e: 31 .dd1 $31 ++002d8f cd8f: bc .dd1 $bc ++002d90 cd90: e4 .dd1 $e4 ++002d91 cd91: 06 .dd1 $06 ++002d92 cd92: 08 .dd1 $08 ++002d93 cd93: 11 .dd1 $11 ++002d94 cd94: 09 .dd1 $09 ++002d95 cd95: cc .dd1 $cc ++002d96 cd96: 21 .dd1 $21 ++002d97 cd97: 40 .dd1 $40 ++002d98 cd98: df .dd1 $df ++002d99 cd99: 1a .dd1 $1a ++002d9a cd9a: 4e .dd1 $4e ++002d9b cd9b: 77 .dd1 $77 ++002d9c cd9c: 79 .dd1 $79 ++002d9d cd9d: 12 .dd1 $12 ++002d9e cd9e: 23 .dd1 $23 ++002d9f cd9f: 13 .dd1 $13 ++002da0 cda0: 10 .dd1 $10 ++002da1 cda1: f7 .dd1 $f7 ++002da2 cda2: 7e .dd1 $7e ++002da3 cda3: 34 .dd1 $34 ++002da4 cda4: b7 .dd1 $b7 ++002da5 cda5: 28 .dd1 $28 ++002da6 cda6: 24 .dd1 $24 ++002da7 cda7: af .dd1 $af ++002da8 cda8: 32 .dd1 $32 ++002da9 cda9: 04 .dd1 $04 ++002daa cdaa: 00 .dd1 $00 ++002dab cdab: 21 .dd1 $21 ++002dac cdac: 4c .dd1 $4c ++002dad cdad: fe .dd1 $fe ++002dae cdae: 22 .dd1 $22 ++002daf cdaf: a3 .dd1 $a3 ++002db0 cdb0: df .dd1 $df ++002db1 cdb1: 3e .dd1 $3e ++002db2 cdb2: 0b .dd1 $0b ++002db3 cdb3: f5 .dd1 $f5 ++002db4 cdb4: 32 .dd1 $32 ++002db5 cdb5: a2 .dd1 $a2 ++002db6 cdb6: df .dd1 $df ++002db7 cdb7: 21 .dd1 $21 ++002db8 cdb8: 03 .dd1 $03 ++002db9 cdb9: 01 .dd1 $01 ++002dba cdba: cd ca db f1 .str ↑“MJ[q” ++002dbe cdbe: 3c .dd1 $3c ++002dbf cdbf: fe .dd1 $fe ++002dc0 cdc0: 10 .dd1 $10 ++002dc1 cdc1: 38 .dd1 $38 ++002dc2 cdc2: f0 .dd1 $f0 ++002dc3 cdc3: 3e .dd1 $3e ++002dc4 cdc4: cd .dd1 $cd ++002dc5 cdc5: 32 .dd1 $32 ++002dc6 cdc6: 90 .dd1 $90 ++002dc7 cdc7: dc c3 d3 da .str ↑“\CSZ” ++002dcb cdcb: 21 .dd1 $21 ++002dcc cdcc: b0 .dd1 $b0 ++002dcd cdcd: df .dd1 $df ++002dce cdce: 7e .dd1 $7e ++002dcf cdcf: 36 .dd1 $36 ++002dd0 cdd0: 01 .dd1 $01 ++002dd1 cdd1: 32 .dd1 $32 ++002dd2 cdd2: 03 .dd1 $03 ++002dd3 cdd3: 00 .dd1 $00 ++002dd4 cdd4: 32 .dd1 $32 ++002dd5 cdd5: 4d .dd1 $4d ++002dd6 cdd6: de .dd1 $de ++002dd7 cdd7: af .dd1 $af ++002dd8 cdd8: 32 .dd1 $32 ++002dd9 cdd9: 94 .dd1 $94 ++002dda cdda: df .dd1 $df ++002ddb cddb: 0e .dd1 $0e ++002ddc cddc: 0d .dd1 $0d ++002ddd cddd: cd .dd1 $cd ++002dde cdde: 06 .dd1 $06 ++002ddf cddf: cc .dd1 $cc ++002de0 cde0: 11 .dd1 $11 ++002de1 cde1: 49 .dd1 $49 ++002de2 cde2: df .dd1 $df ++002de3 cde3: 0e .dd1 $0e ++002de4 cde4: 0f .dd1 $0f ++002de5 cde5: cd .dd1 $cd ++002de6 cde6: 06 .dd1 $06 ++002de7 cde7: cc .dd1 $cc ++002de8 cde8: 3c .dd1 $3c ++002de9 cde9: 20 .dd1 $20 ++002dea cdea: 05 .dd1 $05 ++002deb cdeb: 21 .dd1 $21 ++002dec cdec: e4 .dd1 $e4 ++002ded cded: a0 .dd1 $a0 ++002dee cdee: 18 .dd1 $18 ++002def cdef: 37 .dd1 $37 ++002df0 cdf0: 11 .dd1 $11 ++002df1 cdf1: 00 .dd1 $00 ++002df2 cdf2: 01 .dd1 $01 ++002df3 cdf3: d5 .dd1 $d5 ++002df4 cdf4: 0e .dd1 $0e ++002df5 cdf5: 1a .dd1 $1a ++002df6 cdf6: cd .dd1 $cd ++002df7 cdf7: 06 .dd1 $06 ++002df8 cdf8: cc .dd1 $cc ++002df9 cdf9: 0e .dd1 $0e ++002dfa cdfa: 14 .dd1 $14 ++002dfb cdfb: 11 .dd1 $11 ++002dfc cdfc: 49 .dd1 $49 ++002dfd cdfd: df .dd1 $df ++002dfe cdfe: cd .dd1 $cd ++002dff cdff: 06 .dd1 $06 ++002e00 ce00: cc .dd1 $cc ++002e01 ce01: b7 .dd1 $b7 ++002e02 ce02: 20 .dd1 $20 ++002e03 ce03: 1b .dd1 $1b ++002e04 ce04: d1 .dd1 $d1 ++002e05 ce05: 21 .dd1 $21 ++002e06 ce06: 80 .dd1 $80 ++002e07 ce07: 00 .dd1 $00 ++002e08 ce08: 19 .dd1 $19 ++002e09 ce09: eb .dd1 $eb ++002e0a ce0a: 7a .dd1 $7a ++002e0b ce0b: fe .dd1 $fe ++002e0c ce0c: 80 .dd1 $80 ++002e0d ce0d: 20 .dd1 $20 ++002e0e ce0e: 0d .dd1 $0d ++002e0f ce0f: 21 .dd1 $21 ++002e10 ce10: 94 .dd1 $94 ++002e11 ce11: df .dd1 $df ++002e12 ce12: 34 .dd1 $34 ++002e13 ce13: 7e .dd1 $7e ++002e14 ce14: fe .dd1 $fe ++002e15 ce15: 02 .dd1 $02 ++002e16 ce16: 21 .dd1 $21 ++002e17 ce17: 08 .dd1 $08 ++002e18 ce18: a2 .dd1 $a2 ++002e19 ce19: 28 .dd1 $28 ++002e1a ce1a: 0c .dd1 $0c ++002e1b ce1b: af .dd1 $af ++002e1c ce1c: 57 .dd1 $57 ++002e1d ce1d: 18 .dd1 $18 ++002e1e ce1e: d4 .dd1 $d4 ++002e1f ce1f: 3e .dd1 $3e ++002e20 ce20: 01 .dd1 $01 ++002e21 ce21: 32 .dd1 $32 ++002e22 ce22: 94 .dd1 $94 ++002e23 ce23: df .dd1 $df ++002e24 ce24: 21 .dd1 $21 ++002e25 ce25: f3 a1 c3 d0+ .str ↑“s!CP[” ++002e2a ce2a: 21 .dd1 $21 ++002e2b ce2b: e7 .dd1 $e7 ++002e2c ce2c: a0 .dd1 $a0 ++002e2d ce2d: 18 .dd1 $18 ++002e2e ce2e: f8 .dd1 $f8 ++002e2f ce2f: 32 .dd1 $32 ++002e30 ce30: 99 .dd1 $99 ++002e31 ce31: df .dd1 $df ++002e32 ce32: 21 .dd1 $21 ++002e33 ce33: dd .dd1 $dd ++002e34 ce34: 1b .dd1 $1b ++002e35 ce35: 18 .dd1 $18 ++002e36 ce36: f0 .dd1 $f0 ++002e37 ce37: 21 .dd1 $21 ++002e38 ce38: cb .dd1 $cb ++002e39 ce39: 19 .dd1 $19 ++002e3a ce3a: 18 .dd1 $18 ++002e3b ce3b: 03 .dd1 $03 ++002e3c ce3c: 21 .dd1 $21 ++002e3d ce3d: d4 .dd1 $d4 ++002e3e ce3e: 19 .dd1 $19 ++002e3f ce3f: c3 .dd1 $c3 ++002e40 ce40: d0 .dd1 $d0 ++002e41 ce41: db .dd1 $db ++002e42 ce42: 32 .dd1 $32 ++002e43 ce43: e0 .dd1 $e0 ++002e44 ce44: df .dd1 $df ++002e45 ce45: 21 .dd1 $21 ++002e46 ce46: dd .dd1 $dd ++002e47 ce47: 19 .dd1 $19 ++002e48 ce48: c3 .dd1 $c3 ++002e49 ce49: d0 .dd1 $d0 ++002e4a ce4a: db .dd1 $db ++002e4b ce4b: 50 .dd1 $50 ++002e4c ce4c: 00 .dd1 $00 ++002e4d ce4d: 00 .dd1 $00 ++002e4e ce4e: 4f 0a 0a 0a+ .str “O”,$0a,$0a,$0a,“Apple SoftCard /// CP/M”,$0d,$0a,“ 56K Versi” + + “on 2.20”,$0d,$0a,“(C) 1982 Microsoft Corp.”,$0d,$0a,$0a,$0a,$0a ++002e9d ce9d: 05 00 00 00+ .bulk 0500000000000000000000e2dfde92e280e2000000000000000000e2dfdeb0e2 + + 9ee2000000000000000000e2dfde52df40df000000000000000000e2dfde70df + + 5edf20000307008b002f00c0000c000300000306090c0f0205080b0e0104 ++002efb cefb: 07 0a 0d 0d+ .str $07,$0a,$0d,$0d,$0a,“Insert CP/M System disk and press RETURN ” + + $07 ++002f2a cf2a: 00 00 00 00+ .bulk 000000000000000000000000000000000000000000002ade2ade2ade2ade0001 ++002f4a cf4a: 44 52 49 56+ .str “DRIVER SOS” ++002f55 cf55: 00 .dd1 $00 ++002f56 cf56: 00 .dd1 $00 ++002f57 cf57: 00 .dd1 $00 ++002f58 cf58: 00 .dd1 $00 ++002f59 cf59: 00 .dd1 $00 ++002f5a cf5a: 00 .dd1 $00 ++002f5b cf5b: 00 .dd1 $00 ++002f5c cf5c: 00 .dd1 $00 ++002f5d cf5d: 00 .dd1 $00 ++002f5e cf5e: 00 .dd1 $00 ++002f5f cf5f: 00 .dd1 $00 ++002f60 cf60: 00 .dd1 $00 ++002f61 cf61: 00 .dd1 $00 ++002f62 cf62: 00 .dd1 $00 ++002f63 cf63: 00 .dd1 $00 ++002f64 cf64: 00 .dd1 $00 ++002f65 cf65: 00 .dd1 $00 ++002f66 cf66: 00 .dd1 $00 ++002f67 cf67: 00 .dd1 $00 ++002f68 cf68: 00 .dd1 $00 ++002f69 cf69: 00 .dd1 $00 ++002f6a cf6a: 00 .dd1 $00 ++002f6b cf6b: 00 .dd1 $00 ++002f6c cf6c: 00 .dd1 $00 ++002f6d cf6d: 00 .dd1 $00 ++002f6e cf6e: 00 .dd1 $00 ++002f6f cf6f: 00 .dd1 $00 ++002f70 cf70: 00 .dd1 $00 ++002f71 cf71: 00 .dd1 $00 ++002f72 cf72: 00 .dd1 $00 ++002f73 cf73: 00 .dd1 $00 ++002f74 cf74: 00 .dd1 $00 ++002f75 cf75: 00 .dd1 $00 ++002f76 cf76: 00 .dd1 $00 ++002f77 cf77: 00 .dd1 $00 ++002f78 cf78: 00 .dd1 $00 ++002f79 cf79: 00 .dd1 $00 ++002f7a cf7a: 00 .dd1 $00 ++002f7b cf7b: 00 .dd1 $00 ++002f7c cf7c: 00 .dd1 $00 ++002f7d cf7d: 00 .dd1 $00 ++002f7e cf7e: 00 .dd1 $00 ++002f7f cf7f: 00 .dd1 $00 ++002f80 cf80: c3 .dd1 $c3 ++002f81 cf81: d0 .dd1 $d0 ++002f82 cf82: db .dd1 $db ++002f83 cf83: c3 .dd1 $c3 ++002f84 cf84: 2f .dd1 $2f ++002f85 cf85: de .dd1 $de ++002f86 cf86: c3 .dd1 $c3 ++002f87 cf87: 37 .dd1 $37 ++002f88 cf88: de .dd1 $de ++002f89 cf89: c3 .dd1 $c3 ++002f8a cf8a: 3c .dd1 $3c ++002f8b cf8b: de .dd1 $de ++002f8c cf8c: c3 .dd1 $c3 ++002f8d cf8d: 42 .dd1 $42 ++002f8e cf8e: de .dd1 $de ++002f8f cf8f: 4c .dd1 $4c ++002f90 cf90: 00 .dd1 $00 ++002f91 cf91: 00 .dd1 $00 ++002f92 cf92: 00 .dd1 $00 ++002f93 cf93: 00 .dd1 $00 ++002f94 cf94: 01 .dd1 $01 ++002f95 cf95: 00 .dd1 $00 ++002f96 cf96: bc .dd1 $bc ++002f97 cf97: e2 .dd1 $e2 ++002f98 cf98: 00 .dd1 $00 ++002f99 cf99: 00 .dd1 $00 ++002f9a cf9a: 00 .dd1 $00 ++002f9b cf9b: 00 .dd1 $00 ++002f9c cf9c: 00 .dd1 $00 ++002f9d cf9d: 00 .dd1 $00 ++002f9e cf9e: 00 .dd1 $00 ++002f9f cf9f: 00 .dd1 $00 ++002fa0 cfa0: 00 .dd1 $00 ++002fa1 cfa1: 00 .dd1 $00 ++002fa2 cfa2: 00 .dd1 $00 ++002fa3 cfa3: 00 .dd1 $00 ++002fa4 cfa4: 00 .dd1 $00 ++002fa5 cfa5: 00 .dd1 $00 ++002fa6 cfa6: 00 .dd1 $00 ++002fa7 cfa7: 00 .dd1 $00 ++002fa8 cfa8: 00 .dd1 $00 ++002fa9 cfa9: 00 .dd1 $00 ++002faa cfaa: 00 .dd1 $00 ++002fab cfab: 00 .dd1 $00 ++002fac cfac: 00 .dd1 $00 ++002fad cfad: 00 .dd1 $00 ++002fae cfae: 00 .dd1 $00 ++002faf cfaf: 00 .dd1 $00 ++002fb0 cfb0: 00 .dd1 $00 ++002fb1 cfb1: 00 .dd1 $00 ++002fb2 cfb2: 00 .dd1 $00 ++002fb3 cfb3: 00 .dd1 $00 ++002fb4 cfb4: 00 .dd1 $00 ++002fb5 cfb5: 00 .dd1 $00 ++002fb6 cfb6: 00 .dd1 $00 ++002fb7 cfb7: 00 .dd1 $00 ++002fb8 cfb8: 00 .dd1 $00 ++002fb9 cfb9: 00 .dd1 $00 ++002fba cfba: 00 .dd1 $00 ++002fbb cfbb: 00 .dd1 $00 ++002fbc cfbc: 00 .dd1 $00 ++002fbd cfbd: 00 .dd1 $00 ++002fbe cfbe: 00 .dd1 $00 ++002fbf cfbf: 00 .dd1 $00 ++002fc0 cfc0: 80 .dd1 $80 ++002fc1 cfc1: 00 .dd1 $00 ++002fc2 cfc2: 00 .dd1 $00 ++002fc3 cfc3: 00 .dd1 $00 ++002fc4 cfc4: 00 .dd1 $00 ++002fc5 cfc5: 00 .dd1 $00 ++002fc6 cfc6: 00 .dd1 $00 ++002fc7 cfc7: 00 .dd1 $00 ++002fc8 cfc8: ff .dd1 $ff ++002fc9 cfc9: ff .dd1 $ff ++002fca cfca: ff .dd1 $ff ++002fcb cfcb: ff .dd1 $ff ++002fcc cfcc: ff .dd1 $ff ++002fcd cfcd: ff .dd1 $ff ++002fce cfce: ff .dd1 $ff ++002fcf cfcf: ff .dd1 $ff ++002fd0 cfd0: ff .dd1 $ff ++002fd1 cfd1: ff .dd1 $ff ++002fd2 cfd2: ff .dd1 $ff ++002fd3 cfd3: ff .dd1 $ff ++002fd4 cfd4: 00 .dd1 $00 ++002fd5 cfd5: 00 .dd1 $00 ++002fd6 cfd6: 00 .dd1 $00 ++002fd7 cfd7: 00 .dd1 $00 ++002fd8 cfd8: 00 .dd1 $00 ++002fd9 cfd9: 00 .dd1 $00 ++002fda cfda: 00 .dd1 $00 ++002fdb cfdb: 00 .dd1 $00 ++002fdc cfdc: 00 .dd1 $00 ++002fdd cfdd: 00 .dd1 $00 ++002fde cfde: 00 .dd1 $00 ++002fdf cfdf: 00 .dd1 $00 ++002fe0 cfe0: 00 .dd1 $00 ++002fe1 cfe1: 00 .dd1 $00 ++002fe2 cfe2: 00 .dd1 $00 ++002fe3 cfe3: 00 .dd1 $00 ++002fe4 cfe4: 00 .dd1 $00 ++002fe5 cfe5: 00 .dd1 $00 ++002fe6 cfe6: 00 .dd1 $00 ++002fe7 cfe7: 00 .dd1 $00 ++002fe8 cfe8: 00 .dd1 $00 ++002fe9 cfe9: 00 .dd1 $00 ++002fea cfea: 00 .dd1 $00 ++002feb cfeb: 00 .dd1 $00 ++002fec cfec: 00 .dd1 $00 ++002fed cfed: 00 .dd1 $00 ++002fee cfee: 00 .dd1 $00 ++002fef cfef: 00 .dd1 $00 ++002ff0 cff0: 00 .dd1 $00 ++002ff1 cff1: 00 .dd1 $00 ++002ff2 cff2: 00 .dd1 $00 ++002ff3 cff3: 00 .dd1 $00 ++002ff4 cff4: 00 .dd1 $00 ++002ff5 cff5: 00 .dd1 $00 ++002ff6 cff6: 00 .dd1 $00 ++002ff7 cff7: 00 .dd1 $00 ++002ff8 cff8: 00 .dd1 $00 ++002ff9 cff9: 00 .dd1 $00 ++002ffa cffa: 00 .dd1 $00 ++002ffb cffb: 00 .dd1 $00 ++002ffc cffc: 00 .dd1 $00 ++002ffd cffd: 00 .dd1 $00 ++002ffe cffe: 00 .dd1 $00 ++002fff cfff: 00 LCFFF .dd1 $00 diff --git a/Softcard3/disks/cpmdriver.dsk b/Softcard3/disks/cpmdriver.dsk new file mode 100644 index 0000000..4537f3f Binary files /dev/null and b/Softcard3/disks/cpmdriver.dsk differ diff --git a/Softcard3/disks/sos_selector_hd.po b/Softcard3/disks/sos_selector_hd.po new file mode 100644 index 0000000..6a5840e Binary files /dev/null and b/Softcard3/disks/sos_selector_hd.po differ diff --git a/Softcard3/src/apple3.cfg b/Softcard3/src/apple3.cfg new file mode 100644 index 0000000..9c70953 --- /dev/null +++ b/Softcard3/src/apple3.cfg @@ -0,0 +1,10 @@ +MEMORY +{ + RAM: start=$200, size=$b800, type=rw, define=yes, file=%O; + +} + +SEGMENTS +{ + RAM: load=RAM, type=rw; +} \ No newline at end of file diff --git a/Softcard3/src/cpmdriver/cpm1.s b/Softcard3/src/cpmdriver/cpm1.s new file mode 100644 index 0000000..6030d2d --- /dev/null +++ b/Softcard3/src/cpmdriver/cpm1.s @@ -0,0 +1,1029 @@ +; This is a modified version of the Problock3 driver for use with the Softcard /// +; This has an additional layer on top that maps two sos files, CPM1 & CPM2 to +; appear as CPM disks. This driver assumes a tree type file, so must be larger then 128k. +; The names in the DIBs are used as the filenames with the '.' removed. So in theory, it could +; be used to mount any po image file on a drive by changing the names. +; +; The Softcard /// came with this driver for the Profile only as far as I can tell. +; +; This verion buffers the data locally with the driver and copys it in or out as required +; This is to simplify the extended addressing handling. +; +; It also reads and holds the tree index blocks for each file when the driver is initialised +; So not very kind on the memory usage, but that does not seem to be an issue for this. +; +; +; If the Driver Slot is configured with ff, then the driver scans all slots +; from 4 to 1 looking for the prodos card signature and uses the first +; one it finds. +; If the Driver Slot is configured with 1 - 4, then it uses that configured slot +; The default setting is to autoscan +; +; before calling the card firmware the driver +; - saves the screenholes for the current slot and slot0 +; - saves zeropage locations 20-4f (this seemed to remove any inconsistencies) +; - disable interrupts +; - tries to detect if there is any font loading underway and waits if there is +; so as not to corrupt the font +; +; +; By Robert Justice +; +; .TITLE "Apple /// Softcard CPM Prodos Block Mode Driver" + .PROC CPMProblock + .setcpu "6502" + .reloc + +DriverVersion = $001B ; Version number +DriverMfgr = $524A ; Driver Manufacturer - RJ +DriverType = $E1 ; No formatter present for the time being +DriverSubtype = $02 ; +ScanStart = $04 ; Slot number to start scan from +AutoScan = $FF ; Auto scan slots + +; +; SOS Equates +; +ExtPG = $1401 ; Driver extended bank address offset +ALLOCSIR = $1913 ; Allocate system internal resource +SELC800 = $1922 ; Enable Expansion Rom Space +DEALCSIR = $1916 ; De-allocate system internal resource +SYSERR = $1928 ; Report error to system +EReg = $FFDF ; Environment register +E_IFR = $FFED ; VIA E Interrupt Flag Register +E_IER = $FFEE ; VIA E Interrupt Enable Register +Bank_Reg = $FFEF ; Bank register +CWrtOff = $C0DA ; Character loading off +CWrtOn = $C0DB ; Character loading on +E1908 = $1908 ; GLOBAL FLAG FOR MOUSE DRIVER + ; TO SAY WE CANNOT BE INTERRUPTED + + +; +; SOS Zero page parameters +; +ReqCode = $C0 ; Request code +SOS_Unit = $C1 ; Unit number +SosBuf = $C2 ; SOS buffer pointer +ReqCnt = $C4 ; Requested byte count +CtlStat = $C2 ; Control/status code +CSList = $C3 ; Control/status list pointer +SosBlk = $C6 ; Starting block number +QtyRead = $C8 ; Bytes read return by D_READ + +; +; Parameter block specific to current SOS request +; +Num_Blks = $E2 ; Number of blocks requested (we'll never ever have > 128 blocks) +Count = $E3 ; 2 bytes lb,hb + +; +; Extra zero page variables +; +ScreenBase = $E5 ; 2 bytes lb,hb for save/restore screenholes +Pointer = $E7 ; 2 byte pointer for signature check +CurrBank = $E9 ; current bank (needs to be out of bank switching memory) +begin = $EA ; for the directory searching +end = $EC ; for the directory searching +; +; SOS Error Codes +; +XDNFERR = $10 ; Device not found +XBADDNUM = $11 ; Invalid device number +XREQCODE = $20 ; Invalid request code +XCTLCODE = $21 ; Invalid control/status code +XCTLPARAM = $22 ; Invalid control/status parameter +XNORESRC = $25 ; Resource not available +XBADOP = $26 ; Invalid operation +XIOERROR = $27 ; I/O error +XNODRIVE = $28 ; Drive not connected +XBYTECNT = $2C ; Byte count not a multiple of 512 +XBLKNUM = $2D ; Block number to large +XDISKSW = $2E ; Disk switched +XDCMDERR = $31 ; device command ABORTED error occurred +XCKDEVER = $32 ; Check device readiness routine failed +XNORESET = $33 ; Device reset failed +XNODEVIC = $38 ; Device not connected + +; Prodos block mode commands +Read = 1 +Write = 2 +Status = 0 + +; for directory searching +storage = 0 ; file's storage type +tree = $30 ; storage type = tree index file +rootdir = $f0 ; storage type = root directory +nextdblk = 2 ; loc of next directory block +xblk = $11 ; loc of index block address in file entry +blks_used = $13 ; loc of blocks used in file entry +entry_len = $27 ; entry length in directory + +; +; Switch Macro +; +.MACRO SWITCH index,bounds,adrs_table,noexec ; See SOS Reference +.IFNBLANK index ; If PARM1 is present, + lda index ; load A with switch index +.ENDIF +.IFNBLANK bounds ; If PARM2 is present, + cmp #bounds+1 ; perform bounds checking + bcs @110 ; on switch index +.ENDIF + asl A ; Multiply by 2 for table index + tay + lda adrs_table+1,y ; Get switch address from table + pha ; and push onto Stack + lda adrs_table,y + pha +.IFBLANK noexec + rts ; Exit to code +.ENDIF +@110: +.ENDMACRO + + .SEGMENT "TEXT" + +; +; Comment Field of driver +; + .word $FFFF ; Signal that we have a comment + .word COMMENT_END - COMMENT +COMMENT: .byte "Apple /// Softcard CPM Block Driver - RJ" +COMMENT_END: + + .SEGMENT "DATA" + + +;------------------------------------ +; +; Device identification Block (DIB) - Volume #1 +; +;------------------------------------ + +DIB1: .word DIB2 ; Link pointer + .word Entry ; Entry pointer +DIB1_Name: .byte $05 ; Name length byte + .byte ".CPM1 "; Device name + .byte $80 ; Active, no page alignment +DIB1_Slot: .byte AutoScan ; Slot number + .byte $00 ; Unit number + .byte DriverType ; Type + .byte DriverSubtype ; Subtype + .byte $00 ; Filler +DIB1_Blks: .word $0000 ; # Blocks in device + .word DriverMfgr ; Manufacturer + .word DriverVersion ; Driver version + .word $0000 ; DCB length followed by DCB +; +; Device identification Block (DIB) - Volume #2 +; Page alignment begins here +; +DIB2: .word 0000 ; Link pointer + .word Entry ; Entry pointer +DIB2_Name: .byte $05 ; Name length byte + .byte ".CPM2 "; Device name + .byte $80 ; Active +DIB2_Slot: .byte AutoScan ; Slot number + .byte $01 ; Unit number + .byte DriverType ; Type + .byte DriverSubtype ; Subtype + .byte $00 ; Filler +DIB2_Blks: .word $0000 ; # Blocks in device + .word DriverMfgr ; Driver manufacturer + .word DriverVersion ; Driver version + .word $0000 ; DCB length followed by DCB + + +;------------------------------------ +; +; Local storage locations +; +;------------------------------------ + +LastOP: .res $02, $FF ; Last operation for D_REPEAT calls +SIR_Addr: .word SIR_Tbl +SIR_Tbl: .res $05, $00 +SIR_Len = *-SIR_Tbl +MaxUnits: .byte $02 ; The maximum number of units + +DCB_Idx: .byte $00 ; DCB 0's blocks + .byte DIB2_Blks-DIB1_Blks ; DCB 1's blocks + +CardIsOK: .byte $00 ; Have we found an intelligent disk controller yet? + +TmpScrH: .res $10, $00 ; Storage for screenholes, slot0 & current slot +TmpZero: .res $30, $00 ; Storage to save zero page locations + ; we set the prodos call data in here and then swap + ; it in before we call the interface +ProCommand = TmpZero + $22 ; Command - $42 +ProUnit = TmpZero + $23 ; Unit number - $43 +ProBuf = TmpZero + $24 ; buffer pointer - $44 +ProBlock = TmpZero + $26 ; Block number - $46 + +ProBufOff = $44 ; buffer pointer - $44 + +Signature: .byte $FF, $20, $FF, $00 ; Disk card signature for disk controller + .byte $FF, $03 + +ProBank: .byte $00 ; destination bank for block data +Offset: .byte $00 + +xbytetmp: .byte $00 ; save xbyte + +namlen: .byte $00 ; temp holder for name length +entry0: .word Buffer+4 ; loc of first file entry in directory + +BlksUsed: .word 0 +infoblks: .byte 0 + +TreeBlk1: .res 512,0 ; buffer to hold tree index block +TreeBlk2: .res 512,0 ; buffer to hold tree index block + +Buffer: .res 512,0 ; buffer for block read/writes + ; buffered to remove the need working around the + ; enhanced addressing + +TreeBlk1Ad: .word TreeBlk1 ;make sure reloc address is 16bit +TreeBlk2Ad: .word TreeBlk2 +BufferAd: .word Buffer + + + +;------------------------------------ +; +; Driver request handlers +; +;------------------------------------ + +Entry: + jsr Dispatch ; Call the dispatcher + ldx SOS_Unit ; Get drive number for this unit + lda ReqCode ; Keep request around for D_REPEAT + sta LastOP,x ; Keep track of last operation + rts + +; +; The Dispatcher. Note that if we came in on a D_INIT call, +; we do a branch to Dispatch normally. +; Dispatch is called as a subroutine! +; +DoTable: .word DRead-1 ; 0 Read request + .word DWrite-1 ; 1 Write request + .word DStatus-1 ; 2 Status request + .word DControl-1 ; 3 Control request + .word BadReq-1 ; 4 Unused + .word BadReq-1 ; 5 Unused + .word BadOp-1 ; 6 Open - valid for character devices + .word BadOp-1 ; 7 Close - valid for character devices + .word DInit-1 ; 8 Init request + .word DRepeat-1 ; 9 Repeat last read or write request + +Dispatch: SWITCH ReqCode,9,DoTable ; Serve the request + +; +; Dispatch errors +; +BadReq: lda #XREQCODE ; Bad request code! + jsr SYSERR ; Return to SOS with error in A + +BadOp: lda #XBADOP ; Invalid operation! + jsr SYSERR ; Return to SOS with error in A + +; +; D_REPEAT - repeat the last D_READ or D_WRITE call +; +DRepeat: ldx SOS_Unit + lda LastOP,x ; Recall the last thing we did + cmp #$02 ; Looking for operation < 2 + bcs BadOp ; Can only repeat a read or write + sta ReqCode + jmp Dispatch + +NoDevice: lda #XDNFERR ; Device not found + jsr SYSERR ; Return to SOS with error in A + +; +; D_INIT call processing - called once each for all volumes. +; on first entry we search the slots from 4 to 1 for a block devices +; and use the first one we find +; +DInit: + lda CardIsOK ; Check if we have checked for a card already + bne FoundCard ; Yes, skip signature check + +CheckSig: + lda DIB1_Slot ; Check configured slot for autoscan + bpl FixedSlot ; No, use configured DIB1 slot + lda #ScanStart ; else load starting scan slot +FixedSlot: ora #$C0 ; Form a $Cs00 address, where s = slot # + sta Pointer+1 + lda #$00 + sta Pointer + sta Pointer+ExtPG ; zero out the xbyte + +CheckNext: ldy #$05 ; We check all 3 sig bytes, starting from last +@1: lda (Pointer),y + cmp Signature,Y + bne NoMatch ; No device if bytes don't match + dey + dey + bpl @1 + + ldy #$ff ; $CxFF - check last byte + lda (Pointer),y + cmp #$00 + beq NoMatch ; if $00, is a Disk II 16 sector device, error + cmp #$ff + bne Match ; if its not $ff (Disk II 13 sector device) + ; Then we found an intelligent disk controller :-) + +NoMatch: lda DIB1_Slot ; No match, check if we are autoscanning + cmp #$ff + bne NoDevice ; No we are not, error + + dec Pointer+1 ; Else try next slot + lda Pointer+1 + and #$07 + bne CheckNext ; Check next slot + beq NoDevice ; Otherwise we did not find one :-( + +Match: sta ProDrvAdr+1 ; Set card driver entry low byte + lda Pointer+1 + sta ProDrvAdr+2 ; Set card driver entry high byte + and #$07 + sta DIB1_Slot ; Set found slot for both DIBs + sta DIB2_Slot + ora #$10 ; SIR = $10+slot# + sta SIR_Tbl + sta CardIsOK ; Remember that we found a card + lda #SIR_Len + ldx SIR_Addr + ldy SIR_Addr+1 + jsr ALLOCSIR ; Claim SIR + bcs NoDevice + +FoundCard: jsr SetupIndex ; find file and read in tree blk + ldx BlksUsed + ldy BlksUsed+1 + lda SOS_Unit ; determine which unit + bne Unit1 + + stx DIB1_Blks + sty DIB1_Blks+1 + lda #0 ; no error + clc + rts + +Unit1: stx DIB2_Blks + sty DIB2_Blks+1 + lda #0 ; no error + clc + rts + +NoDevice2: lda #XDNFERR ; Device not found + jsr SYSERR ; Return to SOS with error in A + +; +; D_READ call processing +; +DRead: + lda CardIsOK ; Did we previously find a card? + bne DReadGo + jmp NoDevice ; If not... then bail +DReadGo: + jsr CkCnt ; Checks for validity, aborts if not + jsr CkUnit ; Checks for unit below unit max + jsr SetProUnit ; Set Prodos unit + lda #$00 ; Zero # bytes read + sta Count ; Local count of bytes read + sta Count+1 + tay + sta (QtyRead),Y ; Userland count of bytes read + iny + sta (QtyRead),Y ; Msb of userland bytes read + lda Num_Blks ; Check for block count greater than zero + beq ReadExit + jsr FixUp ; Correct for addressing anomalies + + lda ProBufOff+ExtPG ; save xbyte + sta xbytetmp + +ReadOne: jsr SetBlk ; map file block to disk block + jsr SetProBuf ; set Prodos buffer pointer + jsr ProDriver ; call card prodos firmware interface + bcs IO_Error + + jsr CopyBufR ; copy the buffer to target memory + + inc Count+1 ; increment our byte count by 512 + inc Count+1 + inc SosBlk + bne SkipReadMSBIncrement + inc SosBlk+1 +SkipReadMSBIncrement: + inc SosBuf+1 ; Go get the next block in the buffer + jsr BumpSosBuf ; ...512 bytes in, and check the pointer + dec Num_Blks + bne ReadOne + ldy #0 + lda Count ; Local count of bytes read + sta (QtyRead),Y ; Update # of bytes actually read + lda Count+1 + iny + sta (QtyRead),Y + clc +ReadExit: + lda xbytetmp ; restore xbyte + sta ProBufOff+ExtPG + rts ; Exit read routines + +IO_Error: lda #XIOERROR ; I/O error + jsr SYSERR ; Return to SOS with error in A + +; +; D_WRITE call processing +; +DWrite: + lda CardIsOK ; Did we previously find a card? + bne DWriteGo + jmp NoDevice ; If not... then bail + +DWriteGo: + jsr CkCnt ; Checks for validity, aborts if not + jsr CkUnit ; Checks for unit below unit max + jsr SetProUnit ; Set Prodos unit + lda Num_Blks ; Check for block count greater than zero + beq WriteExit + jsr FixUp ; Correct for addressing anomalies + lda ProBufOff+ExtPG ; save xbyte + sta xbytetmp + + jsr SetProBuf ; set Prodos buffer pointer + +WriteOne: jsr SetBlk ; map file block to disk block + lda #Write + sta ProCommand + jsr CopyBufW ; copy data into local write buffer + jsr ProDriver ; call card prodos firmware interface + bcs IO_Error + + inc SosBlk ; Bump the block number + bne SkipWriteMSBIncrement + inc SosBlk+1 +SkipWriteMSBIncrement: + inc SosBuf+1 ; Go get the next block in the buffer + jsr BumpSosBuf ; ...512 bytes in, and check the pointer + dec Num_Blks + bne WriteOne + clc +WriteExit: + lda xbytetmp ; restore xbyte + sta ProBufOff+ExtPG + rts + +; +; D_STATUS call processing +; $00 = Driver Status +; $FE = Return preferred bitmap location ($FFFF) +; +DStatus: + lda CardIsOK ; Did we previously find a card? + bne DStatusGo + + jmp NoDevice ; If not... then bail + +DStatusGo: + lda CtlStat ; Which status code to run? + bne DS0 + ; get status from card + lda #Status + sta ProCommand ; Prepare to get status + jsr SetProUnit ; set unitnumber + jsr ProDriver ; call prodos block driver + bcc @ok + jmp NoDevice + +@ok: rts + +DS0: cmp #$FE + bne DSWhat + + ldy #$00 ; Return preferred bit map locations. + lda #$FF ; We return FFFF, don't care + sta (CSList),Y + iny + sta (CSList),Y + clc + rts + +DSWhat: lda #XCTLCODE ; Control/status code no good + jsr SYSERR ; Return to SOS with error in A + +; +; D_CONTROL call processing +; $00 = Reset device +; +DControl: + lda CardIsOK ; Did we previously find a card? + bne DContGo + jmp NoDevice ; If not... then bail + +DContGo: lda CtlStat ; Control command + beq CReset + jmp DCWhat ; Control code no good! +CReset: clc ; No-op +DCDone: rts + +DCWhat: lda #XCTLCODE ; Control/status code no good + jsr SYSERR ; Return to SOS with error in A + +;------------------------------------ +; +; Utility routines +; +;------------------------------------ + +; +; map requested block number to actual block in file +; Tree index block is pre loaded during unit init +; returns with ProBlock set +; +SetBlk: lda #Read + sta ProCommand ; Prepare to read a block + jsr SetProBuf ; set local buffer + lda SosBlk+1 ; get msb of requested file block + tay + + lda SOS_Unit ; check which unit + bne SetBUnit1 + + lda TreeBlk1,y ; lookup next index block + sta ProBlock + lda TreeBlk1+256,y + sta ProBlock+1 + jmp GetBlk + +SetBUnit1: lda TreeBlk2,y ; lookup next index block + sta ProBlock + lda TreeBlk2+256,y + sta ProBlock+1 + +GetBlk: jsr ProDriver ; and read it into Buffer + + lda SosBlk ; get lsb of file block + tay + lda Buffer,y ; lookup target block + sta ProBlock + lda Buffer+256,y + sta ProBlock+1 + rts + +; +; Copy Buffer to target location +; +CopyBufR: ldy #0 ; copy the buffer over +@C1: lda Buffer,y ; using extended addressing + sta (SosBuf),y ; to sos buffer pointer + iny + bne @C1 + + inc SosBuf+1 +@C2: lda Buffer+256,y + sta (SosBuf),y + iny + bne @C2 + + dec SosBuf+1 + rts + +; +; Copy write data into Buffer for writing +; +CopyBufW: ldy #0 ; copy the data from sos buffer pointer +@C1: lda (SosBuf),y ; using extended addressing + sta Buffer,y ; to local Buffer + iny + bne @C1 + + inc SosBuf+1 +@C2: lda (SosBuf),y + sta Buffer+256,y + iny + bne @C2 + + dec SosBuf+1 ; restore sosbuf pointer + rts + +; +; Check ReqCnt to ensure it is a multiple of 512. +; +CkCnt: lda ReqCnt ; Look at the lsb of bytes requested + bne @1 ; No good! lsb should be 00 + lda ReqCnt+1 ; Look at the msb + lsr A ; Put bottom bit into carry, 0 into top + sta Num_Blks ; Convert bytes to number of blks to xfer + bcc CvtBlk ; Carry is set from LSR to mark error. +@1: lda #XBYTECNT + jsr SYSERR ; Return to SOS with error in A + +; +; Test for valid block number; abort on error +; +CvtBlk: + ldx SOS_Unit + ldy DCB_Idx,x + sec + lda DIB1_Blks+1,y ; Blocks on unit msb + sbc SosBlk+1 ; User requested block number msb + bvs BlkErr ; Not enough blocks on device for request + beq @1 ; Equal msb; check lsb. + rts ; Greater msb; we're ok. +@1: lda DIB1_Blks,y ; Blocks on unit lsb + sbc SosBlk ; User requested block number lsb + bvs BlkErr ; Not enough blocks on device for request + rts ; Equal or greater msb; we're ok. + +BlkErr: lda #XBLKNUM + jsr SYSERR ; Return to SOS with error in A + +BumpSosBuf: inc SosBuf+1 ; Increment SosBuf MSB + ; fallthrough to FixUp + +; +; Fix up the buffer pointer to correct for addressing +; anomalies. We just need to do the initial checking +; for two cases: +; 00xx bank N -> 80xx bank N-1 +; 20xx bank 8F if N was 0 +; FDxx bank N -> 7Dxx bank N+1 +; If pointer is adjusted, return with carry set +; +FixUp: lda SosBuf+1 ; Look at msb + beq @1 ; That's one! + cmp #$FD ; Is it the other one? + bcs @2 ; Yep. fix it! + rts ; Pointer unchanged, return carry clear. +@1: lda #$80 ; 00xx -> 80xx + sta SosBuf+1 + dec SosBuf+ExtPG ; Bank N -> band N-1 + lda SosBuf+ExtPG ; See if it was bank 0 + cmp #$7F ; (80) before the DEC. + bne @3 ; Nope! all fixed. + lda #$20 ; If it was, change both + sta SosBuf+1 ; Msb of address and + lda #$8F + sta SosBuf+ExtPG ; Bank number for bank 8F + rts ; Return carry set +@2: and #$7F ; Strip off high bit + sta SosBuf+1 ; FDxx ->7Dxx + inc SosBuf+ExtPG ; Bank N -> bank N+1 +@3: rts ; Return carry set + +CkUnit: lda SOS_Unit ; Checks for unit below unit max + cmp MaxUnits + bmi UnitOk +NoUnit: lda XBADDNUM ; Report no unit to SOS + jsr SYSERR +UnitOk: clc + rts + +; +; Throttle back to 1 MHz +; +GoSlow: pha + php + lda EReg + ora #$80 + sta EReg + plp + pla + rts + +; +; Throttle up to 2 MHz +; +GoFast: pha + php + lda EReg + and #$7F + sta EReg + plp + pla + rts + +; +; Set Prodos buffer pointer +; +SetProBuf: lda BufferAd ; setup ProBuf + sta ProBuf + lda BufferAd+1 + sta ProBuf+1 + lda #0 ; turn off extended addressing + sta ProBufOff+ExtPG + rts + +; +; jsr to card firmware driver +; We update the address based on the slot and firmware CxFF byte +; +ProDriver: sei ; disable interrupts while changing things + lda #$FF + sta E1908 ; E1908 = NON-ZERO LOCKOUT MOUSE + jsr SaveMem ; save and swap in card screen hole & zeropage + jsr GoSlow +ProDrvAdr: jsr $0000 ; call device entry + sei ; Keep interrupts off incase card firmware reenabled + jsr GoFast + jsr RestMem ; save and swap out card screen hole & zeropage + lda #$18 ; Clear CB1 & CB2 flags - VBL + sta E_IFR ; this seems more for mame, its a little different + lda #$00 + sta E1908 ; SAY OK TO MOUSE + cli ; enable interrupts again + rts + +; +; Save current screenholes and restore peripheral card values (current slot + slot0) +; and save zeropage $42-$47 +; +SaveMem: lda E_IER + and #$18 ; See if either CB1 or CB2 interrupts were enabled + beq SkipVbl ; No, they were not, skip the wait for vbl + + ; now wait for 2xVBL before we muck with the screenholes + lda #$18 ; Clear CB2 flag - VBL + sta E_IFR +VWait: bit E_IFR ; Wait for vertical retrace + beq VWait + ; wait for another one to ensure font data is loaded + lda #$18 ; Clear CB2 flag - VBL + sta E_IFR +VWait2: bit E_IFR ; Wait for vertical retrace + beq VWait2 + +SkipVbl: bit CWrtOff ; disable font loading + + jsr SwapScrH ; Swap in the screenhole data with ours + jsr SwapZero ; swap zeropage + rts + +; +; Save Card screen holes and restore original values +; and restore zeropage $42-$47 +; +RestMem: pha + php ; keep carry error indication + jsr SwapZero ; swap zeropage + jsr SwapScrH ; Swap back the original screenhole data + plp + pla + rts + +; +; Swap screenholes with driver values +; we do Slot 0 and current slot values +; This nice code is from Peter Ferrie, thanks +; +SwapScrH: lda #$07 ; Init ZP Screenbase, X and A + sta ScreenBase+1 + lda #$00 + sta ScreenBase + sta ScreenBase+ExtPG + ldx #$0F + lda #$F8 +@loop: + tay ; A holds screen page index at loop entry + lda (ScreenBase),Y + pha ; Save current screen hole byte on stack. + lda TmpScrH,X + sta (ScreenBase),Y ; Restore screen hole byte from array + pla + sta TmpScrH,X ; Copy saved screen hole byte into array. + dex + bmi done ; Exit when array is full (all 16 bytes are copied, X<0). + txa ; TXA/LSR tests whether array index is odd or even + lsr ; and sets carry accordingly (1 = odd). + tya ; Bring screen index into A for manipulation + eor DIB1_Slot ; Cycle page index between $x8 and $x8+n as long as N in 1..7 + bcc @loop ; Take branch every other loop, using array index odd/even + ; (carry still valid from TXA/LSR) + eor #$80 ; Cycle page index between $F8 and $78 + bpl @loop ; If flipping from $78->$F8 (now negative), continue + dec ScreenBase+1 ; Go to next page counting down ($07->$06, etc.) + bne @loop ; Always -- equiv. to BRA or JMP. Never reaches 0. +done: rts + +; +; Swap zeropage with driver values +; +SwapZero: ldx #$2f +@loop2: lda $20,X + pha ; Save current zeropage byte on stack. + lda TmpZero,X + sta $20,X ; Restore zeropage byte from temp storage + pla + sta TmpZero,X ; Copy saved zeropage byte into temp storage. + dex + bpl @loop2 + rts + +; +; Set Prodos unit number +; this driver assumes both files are on unit0 +; +SetProUnit: lda DIB1_Slot ; create the slot/unit byte + asl ; 7 6 5 4 3 2 1 0 + asl ; D S S S 0 0 0 0 + asl + asl + sta ProUnit + rts + + +; +; Search directory and find the cpm disk image file then +; read in the tree index blk and setup the number of blocks +; +SetupIndex: jsr SetProBuf ; set local buffer + lda #Read ; read command + sta ProCommand + jsr SetProUnit ; unit + lda #2 ; block 2 (first directory block) + sta ProBlock + lda #0 + sta ProBlock+1 +rd_dir: jsr ProDriver ; read the block + +; +; search directory for file 'CPM1' or 'CPM2' +; + +FindFile: lda $fff0 + + lda entry0 ; loc of first file entry in directory + sta begin + lda entry0+1 + sta begin+1 + lda #0 ; xbyte=0 + sta begin+ExtPG + +search: clc ; end:=begin+512-entry.len + lda begin+1 + adc #2 + sta end+1 + sec + lda begin + sbc #entry_len ; entry length + sta end + lda end+1 + sbc #0 + sta end+1 + +srch020: lda SOS_Unit ; setup namlen depending on unit + bne srch021 + ldy DIB1_Name + dey ; -1 to remove '.' + sty namlen + bne srch022 + +srch021: ldy DIB2_Name + dey + sty namlen + +srch022: ldy #0 ; does count match? + lda (begin),y + and #$f + cmp namlen + bne srch040 ; no match + tay +srch030: lda SOS_Unit + bne srch060 + + lda (begin),y ; do chars match? + cmp DIB1_Name+1,y + bne srch040 ; no match + dey + bne srch030 + beq srch050 + +srch060: lda (begin),y ; do chars match? + cmp DIB2_Name+1,y + bne srch040 ; no match + dey + bne srch030 + +srch050: ldy #storage ; test storage type + lda (begin),y ; must be tree + and #$f0 + cmp #tree + beq match + cmp #rootdir ; skip if stg type=rootdir + beq srch040 + +srch040: clc + lda begin + adc #entry_len + sta begin + lda begin+1 + adc #0 + sta begin+1 + lda end + cmp begin ; is begin <=end? + lda end+1 + sbc begin+1 + bcs srch020 ; yes,search next field in current block + + clc ; begin :=end+entry.len + lda end + adc #entry_len + sta begin + lda end+1 + adc #0 + sta begin+1 + + ldy #nextdblk ; if nextdir field = 0 then done + lda Buffer,y + sta ProBlock + iny + lda Buffer,y + sta ProBlock+1 + bne NxtDirBlk + lda ProBlock + bne NxtDirBlk + beq BadDrive ; disk image file not found + +NxtDirBlk: jmp rd_dir + +BadDrive: lda #XNODRIVE ; Drive not connected + jsr SYSERR + +; +; file entry found +; read in its index block into the TreeBlock buffer +; +match: ldy #xblk + lda (begin),y + sta ProBlock + iny + lda (begin),y + sta ProBlock+1 + lda SOS_Unit ; which unit? + bne MaUnit1 + + lda TreeBlk1Ad ; setup buffer for disk1 + ldx TreeBlk1Ad+1 + jmp GetTreeB + +MaUnit1: lda TreeBlk2Ad ; setup buffer for disk2 + ldx TreeBlk2Ad+1 + +GetTreeB: sta ProBuf + stx ProBuf+1 + jsr ProDriver ; read tree index block + + ldy #blks_used ; now we need to update the total + lda (begin),y ; blocks for this file into the DIB + sta BlksUsed + iny + lda (begin),y + sta BlksUsed+1 + + ldy #0 ; now we need to subtract the index overhead + lda SOS_Unit + bne chk1 + +chk0: lda TreeBlk1,y ; counter the number of sapling blks + beq chkmsb0 + iny + bne chk0 +chkmsb0: lda TreeBlk1+256,y + beq fin1 + iny + bne chk0 + +chk1: lda TreeBlk2,y + beq chkmsb1 + iny + bne chk1 +chkmsb1: lda TreeBlk2+256,y + beq fin1 + iny + bne chk1 + +fin1: iny ; add one for tree block + sty infoblks ; total number of info blocks + + lda BlksUsed ; now subtract the info blocks count + clc + sbc infoblks + sta BlksUsed + lda BlksUsed+1 + sbc #0 + sta BlksUsed+1 + + rts + + .ENDPROC + .END + diff --git a/Softcard3/src/softcard.s b/Softcard3/src/softcard.s new file mode 100644 index 0000000..f6ef218 --- /dev/null +++ b/Softcard3/src/softcard.s @@ -0,0 +1,352 @@ +; SOS based launcher for the Microsoft Softcard /// +; +; Uses a disk image in .po format and mounts this like a virtual floppy +; The CPM disk image is patched to redirect the inbuilt floppy driver to +; this virtual drive for unit0 (D1) +; +; Inspired by the idea of Holodeck for the Apple2 +; this is a trimmed down version of my /// proof of concept version +; +; +; Memory layout: +; $1300 Holds the stub to replace the ROM Blockio routine (out of bank switched memory) +; and Sectio routine that the internal CPM driver uses +; Bank4 +; $3000 - $33FF This will hold the two index blocks for the image file +; $3400 - $35FF Buffer for the disk read/writes +; $3600 - $xxFF The virtual disk driver is moved here, called by the stub +; +; 29/06/21 Robert Justice +; + + .segment "RAM" + .setcpu "6502" + + .import VDrvLAddr ; virtual driver load address + .import VDrvSize ; size of virtual disk driver + .import DInit ; init virtual disk driver + .import BlockioStb ; entry point for blockio stub + .import StartStub + .import EndStub + .import StubLen + +SysErr = $1928 ; Report error to system +Bank_Reg = $FFEF ; Bank register +EReg = $FFDF ; Environment register + +TERMINATE = $65 +GET_FILE_INFO = $C4 +SET_PREFIX = $C6 +OPEN = $C8 +READ = $CA +WRITE = $CB +CLOSE = $CC +SET_MARK = $CE + +Ptr1 = $20 ; ZP pointer 1 +Ptr2 = $22 ; ZP pointer 2 +CExtPG = $1601 ; Interp extended address offset + +IBBUFP = $85 +IBCMD = $87 + + + .org $A200 - 14 ; use $A200 so we are out of paged mem + ; and above boot sector +; sos interp header + .byte "SOS NTRP" + .word 0000 + .word CodeSt + .word (CodeEnd-CodeSt)+VDrvSize + +CodeSt: jmp Init + +;------------------ +; param lists +; open console param list +OpenCon: .byte 4 + .word NameCon +ConRef: .byte 0 + .word 0 + .byte 0 + +NameCon: .byte 8 + .byte ".CONSOLE" + +; init console param list +InitCon: .byte 3 +InitRef: .byte 0a + .word initscr + .word endinit-initscr + +initscr: .byte 16 ; set text mode + .byte 3 ; 80x24 + .byte 28 ; clear viewport + .byte 24,30,25,11 ; set cursor xpos, column, ypos, row + .byte "Softcard /// Loader" + .byte 24,27,25,13 ; set cursor xpos, column, ypos, row +endinit = * + +; +; copy the virtual disk driver code to bank 4 +; its added at the end of this code by the linker +; +Init: brk ;open console + .byte OPEN + .word OpenCon + beq @ok_c1 + jmp Error + +@ok_c1: lda ConRef ;update reference numbers + sta InitRef + sta WriteRef + sta CloseRef + + brk ;init console + .byte WRITE + .word InitCon + beq @ok_c2 + jmp Error + + +@ok_c2: lda #VDrvCode + sta Ptr1+1 + lda #0 + sta Ptr1+CExtPG + + lda #0 ; set dest ptr = 04:1600 + sta Ptr2 + lda #$16 + sta Ptr2+1 + lda #$84 + sta Ptr2+CExtPG + + ldx #0 +@c1: jsr Copy1 + inc Ptr1+1 + inc Ptr2+1 + inx + cpx #>VDrvSize ; just check in page sizes, close enough + bcc @c1 + beq @c1 + + jmp SetupImg + +; +; open disk image file param list +OpenImg: .byte 4 ;#params + .word FileNam2 ;pointer to filename +ImgRef: .byte 0 ;ref_num result + .word OptLst ;option list ptr + .byte 4 ;length option list + +FileNam2: .byte 11 + .byte "CPMIMAGE.PO" + +OptLst: .byte 1 ;req_access=open for reading only + .byte 4 ;pages, 1024 byte io-buffer + .word Ptr1 ;io_buffer (extended pointer) + +; set mark for disk image file param list +MarkImg: .byte 3 ;#params +MarkRef: .byte 0 ;ref_num + .byte 0 ;base=absolute + .byte $00 ;absolute byte pos = 00020000 + .byte $00 + .byte $02 + .byte $00 + +; +; setup the index blocks for the image file, so we can map the requested +; image file block to the real block on the harddisk block device +; We'll try to use SOS to do some of this +; +; if we open the image file and specify an io buffer (1k), we get the first index block +; easily. + + +SetupImg: lda #4 ;**************for debug to check we have loaded it + sta Bank_Reg ;************** + + lda #0 ;set buffer extended pointer 04:0800 + sta Ptr1 + lda #$08 + sta Ptr1+1 + lda #$84 ;and its xbyte + sta Ptr1+CExtPG + + brk ;open the disk image file + .byte OPEN ;as we allocated our own buffer, we get the first + .word OpenImg ; blk of data and the first index blk read to that + beq @ok4 ; buffer + jmp Error ;report error and exit + +@ok4: lda #0 ;now we'll copy the index block to 04:1000 + sta Ptr2 ;Ptr2 = destination 04:1000 + lda #$10 + sta Ptr2+1 + lda #$84 + sta Ptr2+CExtPG + inc Ptr1+1 ;Ptr1 = source 04:0A00 + inc Ptr1+1 + jsr Copy +; +; need the second index block, set the file mark to 128k bytes +; will trigger sos to get the next index block into the io buffer +; + lda ImgRef ;update the ref num + sta MarkRef + brk ;set the current file position for image to 128k + .byte SET_MARK + .word MarkImg + beq @ok5 + jmp Error ;report error and exit + +@ok5: dec Ptr1+1 ;setup Ptrs + inc Ptr2+1 + jsr Copy ;and copy the next index blk +; +; Move code to page x for call to rom block interface +; to allow switching to other bank +; hopefully, this stays out of the way +; + ldx #error1 + sta ErrRef+1 + lda #enderror1-error1 + sta ErrRef+2 + jmp exit + +@e1: jsr PrByte ; all other errors, print the code + lda #error2 + sta ErrRef+1 + lda #enderror2-error2 + sta ErrRef+2 + +exit: brk + .byte WRITE + .word WriteErr + + ldx #0 ;delay before exit + ldy #0 +@w1: dey + bne @w1 + dex + bne @w1 + + brk ;close .CONSOLE + .byte CLOSE + .word CloseCon + +term: brk ;terminate back to Selector + .byte TERMINATE + .word term + +; +; subroutine to print a byte in a in hex form (destructive) +; puts result into ErrCode +; +PrByte: ldx #0 + pha ;save a for lsd + lsr ;msd to lsd position + lsr + lsr + lsr + jsr PrHex ;output hex digit + pla ;restore a +; fall through to print hex routine + +PrHex: and #$0f ;mask lsd for hex print + ora #'0' ;add "0" + cmp #'9'+1 ;is it a decimal digit? + bcc Store ;yes! output it + adc #6 ;add offset for letter a-f +; fall through to print routine + +Store: sta ErrCode,x + inx + rts + +; we append the virtual disk driver here during linking +VDrvCode = * + +CodeEnd = * \ No newline at end of file diff --git a/Softcard3/src/virtualdisk.s b/Softcard3/src/virtualdisk.s new file mode 100644 index 0000000..35433f0 --- /dev/null +++ b/Softcard3/src/virtualdisk.s @@ -0,0 +1,559 @@ +; Modified problock driver to be used as a virtual floppy disk +; The loader needs to setup $3000 to hold the two index blocks for the +; image file and then pretends to be a 280 block floppy +; +; Not relocatable, hard coded to be at bank 4, at $3600 (256k required) +; +; +; By Robert Justice +; +; .TITLE "Apple /// Virtual Floppy Image Driver" + + .segment "RAM" + .setcpu "6502" + + .export VDrvLAddr + .export VDrvSize + .export DInit + .export BlockioStb ; entry point for blockio stub + .export StartStub + .export EndStub + .export StubLen + + + +VDrvLAddr = $3600 ; org for this code +VDrvSize = EndCode - StartCode + +IndxBlk1 = VDrvLAddr - $600 ; Index block 1 +IndxBlk2 = VDrvLAddr - $400 ; Index block 2 +Buffer = VDrvLAddr - $200 ; Buffer for card block read/writes + +; this needs to be in an unused bit of non banked memory +BlockioStb = $1940 ; entry point for blockio stub +BankSave = BlockioStb + (Bank_Tmp -StartStub) +SectioStb = BlockioStb + (SectIOT - StartStub) ; entry point for sectio stub +StubLen = EndStub - StartStub + + +IBBUFP = $85 +IBCMD = $87 +BUF = $9b ; monitor diskio routines buffer + +; +; SOS Equates +; +ExtPG = $1401 ; Driver extended bank address offset +EReg = $FFDF ; Environment register +E_IFR = $FFED ; VIA E Interrupt Flag Register +E_IER = $FFEE ; VIA E Interrupt Enable Register +Bank_Reg = $FFEF ; Bank register +CWrtOff = $C0DA ; Character loading off +CWrtOn = $C0DB ; Character loading on + +XDNFERR = $10 ; Device not found + +; +; Extra zero page variables +; +ScreenBase = $E5 ; 2 bytes lb,hb for save/restore screenholes +Pointer = $E7 ; 2 byte pointer for signature check + +D_TRACK = $16d8 ; for softcard sectorio +D_SECTOR = $16d9 ; these are the inputs +D_UNITNUM = $16da +D_BUFL = $16db +D_BUFH = $16dc +D_BUFX = $16dd +D_COMMAND = $16de + +OrigDriver = $9cc5 ; Softcard floppy driver entry + +ScanStart = $04 ; Slot number to start scan from + + .SEGMENT "RAM" + .org VDrvLAddr +StartCode = * + + jmp BlockIO ; entry point for BLOCKIO - 3600 + jmp SectIO ; entry point for SectorIO - 3603 +Slot: .byte 0 ; slot for card +EnvSave: .byte 0 ; save current environment state +OrigBlk: .byte 0 ; temp location for original block num + ; only patch blks <256, so 8bits is enough + +;------------------------------------ +; +; Local storage locations +; +;------------------------------------ + +TmpScrH: .res $10, $00 ; Storage for screenholes, slot0 & current slot +TmpZero: .res $30, $00 ; Storage to save zero page locations + ; we set the prodos call data in here and then swap + ; it in before we call the interface +ProCommand = TmpZero + $22 ; Command - $42 +ProUnit = TmpZero + $23 ; Unit number - $43 +ProBuf = TmpZero + $24 ; buffer pointer - $44 +ProBlock = TmpZero + $26 ; Block number - $46 + +ProBufOff = $44 ; buffer pointer - $44 + +Signature: .byte $FF, $20, $FF, $00 ; Disk card signature for disk controller + .byte $FF, $03 + +DInit: lda EReg ; save current environment so we can + sta EnvSave ; restore on exit + ora #$40 ; enable Cxxx I/O + sta EReg + lda #ScanStart ; load starting scan slot + ora #$C0 ; Form a $Cs00 address, where s = slot # + sta Pointer+1 + lda #$00 + sta Pointer + sta Pointer+ExtPG ; zero out the xbyte + +CheckNext: ldy #$05 ; We check all 3 sig bytes, starting from last +@1: lda (Pointer),y + cmp Signature,Y + bne NoMatch ; No device if bytes don't match + dey + dey + bpl @1 + + ldy #$ff ; $CxFF - check last byte + lda (Pointer),y + cmp #$00 + beq NoMatch ; if $00, is a Disk II 16 sector device, error + cmp #$ff + bne Match ; if its not $ff (Disk II 13 sector device) + ; Then we found an intelligent disk controller :-) + +NoMatch: dec Pointer+1 ; try next slot + lda Pointer+1 + and #$07 + bne CheckNext ; Check next slot + beq NoDevice ; Otherwise we did not find one :-( + +Match: sta ProDrvAdr+1 ; Set card driver entry low byte + lda Pointer+1 + sta ProDrvAdr+2 ; Set card driver entry high byte + and #$07 + sta Slot + lda EnvSave + sta EReg + lda #0 + rts + +NoDevice: lda EnvSave + sta EReg + lda #XDNFERR ; Device not found + rts + +; +; jsr to card firmware driver +; We update the address based on the slot and firmware CxFF byte +; +ProDriver: sei ; disable interrupts while changing things + jsr SaveMem ; save and swap in card screen hole & zeropage + jsr GoSlow +ProDrvAdr: jsr $0000 ; call device entry + sei ; Keep interrupts off incase card firmware reenabled + jsr GoFast + jsr RestMem ; save and swap out card screen hole & zeropage + lda #$18 ; Clear CB1 & CB2 flags - VBL + sta E_IFR ; this seems more for mame, its a little different + cli ; enable interrupts again + rts + +; +; Blockio routine. This replicates the rom routine behaviour +; x = block number msb +; a = block number lsb +; IBCMD = command, 1=read , write? +; IBBUFP = dest pointer +; +; For the Softcard ///, the blockio routine is only used to load in +; the boot block 0 and then the next 24 blocks with the 6502 IO routines and CPM +; +; We'll patch the two blocks to redirect them to our new routines here +; as we read them. +; +; Block 0 - offset $df -> 00 13 (new blockio) +; Block 3 - offset $1b4 -> 16 13 (new sectio) +; + +BlockIO: cpx #0 ; check lk num msb + beq Low ; block is <256 + tax + lda IndxBlk2,X + sta ProBlock + lda IndxBlk2+256,X + sta ProBlock+1 + jmp HDone + +Low: sta OrigBlk ; store for patch check + tax ; map the block number + lda IndxBlk1,X + sta ProBlock ; and store for prodos call + lda IndxBlk1+256,X + sta ProBlock+1 + +HDone: lda EReg ; save current environment so we can + sta EnvSave ; restore on exit + lda IBCMD + sta ProCommand + lda IBBUFP + sta BUF + lda IBBUFP+1 + sta BUF+1 + jsr SetProUnit + jsr SetProBuf + lda EReg ; enable I/O + ora #$40 + sta EReg + jsr ProDriver + + jsr CheckPatch ; check if we need to patch it + + ldy #0 ; copy the buffer over +looppt1: lda Buffer,y ; using extended addressing + sta (BUF),y ;1940.50.60 + iny + bne looppt1 + + inc BUF+1 +looppt2: lda Buffer+256,y + sta (BUF),y + iny + bne looppt2 + + dec BUF+1 + + lda EnvSave + sta EReg + + lda #0 ; dummy no error + clc + + rts + +; check and patch the block to redirect here +; and also repatch the blockio and sectio stubs +; as these are located in memory that get loaded from +; the floppy +CheckPatch: lda OrigBlk + bne nxtchk + ldy #$df ; offset for blockio jsr address in boot block + lda #BlockioStb + sta Buffer,Y + bne donep + +nxtchk: cmp #3 + bne donep + ldy #$b4 ; offset for sectio jsr address in block 3 (1b4) + lda #SectioStb + sta Buffer+256,y + + ldy #0 ; also in blk3, we patch in the blockio & sectio stub +@p1: lda StartStub,y ; as these would get overwritten with this blk read + sta Buffer+256+$40,y + iny + cpy #StubLen + bne @p1 + +donep: rts + +; +; Sectio routine. This replicates the softcard floppy sector routine +; 256 byte sectors are mapped to the appropriate blocks +; +; Inputs +; D_TRACK .eq $16d8 +; D_SECTOR .eq $16d9 +; D_UNITNUM .eq $16da +; D_BUFL .eq $16db +; D_BUFH .eq $16dc +; D_BUFX .eq $16dd +; D_COMMAND .eq $16de +; +; +SectMap: .byte 0,4,0,4,1,5,1,5,2,6,2,6,3,7,3,7 ;phys to blk +SectHalf: .byte 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1 ;first 256 or second 256 in block + + +SectIO: lda EReg ; save current environment reg so we can + sta EnvSave ; restore on exit + + lda D_TRACK ; get track number to convert to block num + asl ; multiply x 8 + asl + asl + bcc Lt256 ; blknum < 256 + ldx D_SECTOR ; use sector number as index into map + clc + adc SectMap,x + tax ; then map the block number to image file blocks + lda IndxBlk2,X + sta ProBlock ; and store for prodos call + lda IndxBlk2+256,X + sta ProBlock+1 + jmp HDone2 + +Lt256: ldx D_SECTOR ; use sector number as index into map + adc SectMap,x + tax ; then map the block number to image file blocks + lda IndxBlk1,X + sta ProBlock ; and store for prodos call + lda IndxBlk1+256,X + sta ProBlock+1 + +HDone2: lda #1 ; read the block regardless of write or read + sta ProCommand + jsr SetProUnit + jsr SetProBuf + lda EReg ; enable Cxxx I/O + ora #$40 + sta EReg + jsr ProDriver ; get block + bcs DskError + + lda D_BUFL ; dest pointer lsb + sta BUF ; rom diskio buf lsb + lda D_BUFH ; dest pointer msb + sta BUF+1 ; rom diskio buf msb + lda D_BUFX ; dest pointer xbyte + sta $149c ; rom diskio buf xbyte + + lda D_COMMAND ; now check if its a read/write 1=read, 0=write + lsr a + bcc SectWrite ; yes + +;fall through for read + ldy #0 + ldx D_SECTOR ; use sector number as index into map + lda SectHalf,x + beq firsthr + +secondhr: lda Buffer+256,y ; copy half block buffer into sector buffer + sta (BUF),Y + iny + bne secondhr + beq done2 + +firsthr: lda Buffer,y ; copy half block buffer into sector buffer + sta (BUF),Y + iny + bne firsthr + beq done2 + +SectWrite: ldy #0 + ldx D_SECTOR ; use sector number as index into map + lda SectHalf,x + beq firsthw + +secondhw: lda (BUF),Y ; copy sector into block buffer + sta Buffer+256,y + iny + bne secondhw + beq cont + +firsthw: lda (BUF),Y ; copy sector into block buffer + sta Buffer,y + iny + bne firsthw + +cont: lda #2 ; write + sta ProCommand + jsr ProDriver ; write block buffer back + bcs DskError + +done2: lda EnvSave + sta EReg + + lda #0 ; set no error + clc + + rts + +DskError: lda #$27 ; I/O error? + sec + rts + + +; +; Throttle back to 1 MHz +; +GoSlow: pha + php + lda EReg + ora #$80 + sta EReg + plp + pla + rts + +; +; Throttle up to 2 MHz +; +GoFast: pha + php + lda EReg + and #$7F + sta EReg + plp + pla + rts + +; +; Save current screenholes and restore peripheral card values (current slot + slot0) +; and save zeropage $42-$47 +; +SaveMem: lda E_IER + and #$18 ; See if either CB1 or CB2 interrupts were enabled + beq SkipVbl ; No, they were not, skip the wait for vbl + + ; now wait for 2xVBL before we muck with the screenholes + lda #$18 ; Clear CB2 flag - VBL + sta E_IFR +VWait: bit E_IFR ; Wait for vertical retrace + beq VWait + ; wait for another one to ensure font data is loaded + lda #$18 ; Clear CB2 flag - VBL + sta E_IFR +VWait2: bit E_IFR ; Wait for vertical retrace + beq VWait2 + +SkipVbl: bit CWrtOff ; disable font loading + + jsr SwapScrH ; Swap in the screenhole data with ours + jsr SwapZero ; swap zeropage + rts + +; +; Save Card screen holes and restore original values +; and restore zeropage $42-$47 +; +RestMem: pha + php ; keep carry error indication + jsr SwapZero ; swap zeropage + jsr SwapScrH ; Swap back the original screenhole data + plp + pla + rts + +; +; Swap screenholes with driver values +; we do Slot 0 and current slot values +; This nice code is from Peter Ferrie, thanks +; +SwapScrH: lda #$07 ; Init ZP Screenbase, X and A + sta ScreenBase+1 + lda #$00 + sta ScreenBase + sta ScreenBase+ExtPG + ldx #$0F + lda #$F8 +@loop: + tay ; A holds screen page index at loop entry + lda (ScreenBase),Y + pha ; Save current screen hole byte on stack. + lda TmpScrH,X + sta (ScreenBase),Y ; Restore screen hole byte from array + pla + sta TmpScrH,X ; Copy saved screen hole byte into array. + dex + bmi done ; Exit when array is full (all 16 bytes are copied, X<0). + txa ; TXA/LSR tests whether array index is odd or even + lsr ; and sets carry accordingly (1 = odd). + tya ; Bring screen index into A for manipulation + eor Slot ; Cycle page index between $x8 and $x8+n as long as N in 1..7 + bcc @loop ; Take branch every other loop, using array index odd/even + ; (carry still valid from TXA/LSR) + eor #$80 ; Cycle page index between $F8 and $78 + bpl @loop ; If flipping from $78->$F8 (now negative), continue + dec ScreenBase+1 ; Go to next page counting down ($07->$06, etc.) + bne @loop ; Always -- equiv. to BRA or JMP. Never reaches 0. +done: rts + +; +; Swap zeropage with driver values +; +SwapZero: ldx #$2f +@loop2: lda $20,X + pha ; Save current zeropage byte on stack. + lda TmpZero,X + sta $20,X ; Restore zeropage byte from temp storage + pla + sta TmpZero,X ; Copy saved zeropage byte into temp storage. + dex + bpl @loop2 + rts + +; +; Set Prodos unit number, assume unit0 only +; +SetProUnit: lda Slot ; create the slot/unit byte + asl ; 7 6 5 4 3 2 1 0 + asl ; D S S S 0 0 0 0 + asl + asl + sta ProUnit + rts + +; +; Set Prodos buffer pointer +; +SetProBuf: lda #Buffer + sta ProBuf+1 + lda #0 ; turn off extended addressing + sta ProBufOff+ExtPG + rts + +; +;Blockio stub +; This hides in non banked memory +; +StartStub: ldy Bank_Reg ;save current bank + sty BankSave + ldy #4 ;set virtual disk driver bank + sty Bank_Reg + jsr BlockIO ;go read/write the block + ldy BankSave ;restore bank + sty Bank_Reg + rts +Bank_Tmp: .byte 0 ;temp holder for calling bank +; +;Sector IO stub +; This hides in non banked memory +; we only catch unit 0 (D1) as virtual drive +; other wise we pass to the orignal floppy driver +; +SectIOT: lda D_UNITNUM + beq drive1 + jmp OrigDriver ;continue on with original driver + +drive1: ldy Bank_Reg ;save current bank + sty BankSave + ldy #4 ;set virtual disk driver bank + sty Bank_Reg + jsr SectIO ;go read/write the sector + ldy BankSave ;restore bank + sty Bank_Reg + rts +EndStub =* + + + + +EndCode = * + + .END \ No newline at end of file