Annotated disassembly

From disassembly.py -a on 2024 10 10

loading program: Combined Q1 image from IC25-IC32
loaded 1024 bytes from roms/JDC/IC25.BIN at address 0000h
loaded 1024 bytes from roms/JDC/IC26.BIN at address 0400h
loaded 1024 bytes from roms/JDC/IC27.BIN at address 0800h
loaded 1024 bytes from roms/JDC/IC28.BIN at address 0c00h
loaded 1024 bytes from roms/JDC/IC29.BIN at address 1000h
loaded 1024 bytes from roms/JDC/IC30.BIN at address 1400h
loaded 1024 bytes from roms/JDC/IC31.BIN at address 1800h
loaded 1024 bytes from roms/JDC/IC32.BIN at address 1c00h

;jump tables
0000 c3 e5 01     ; jp 0x1e5             | reset START
0003 c3 77 00     ; jp 0x77              | TOSTR
0006 c3 5b 01     ; jp 0x15b             | TODEC
0009 c3 53 05     ; jp 0x553             | UPDIS
000c c3 42 06     ; jp 0x642             | MUL
000f c3 52 06     ; jp 0x652             | DIV
0012 c3 8a 06     ; jp 0x68a             | BICHAR
0015 c3 7f 06     ; jp 0x67f             | NHL
0018 c3 0f 02     ; jp 0x20f             | START
001b c3 da 03     ; jp 0x3da             | KFILE
001e c3 7d 04     ; jp 0x47d             | KEYIN
0021 c3 b4 06     ; jp 0x6b4             | GETDN
0024 c3 0b 04     ; jp 0x40b             | NKEY
0027 c3 58 04     ; jp 0x458             | DISPLAY
002a c3 8f 03     ; jp 0x38f             | PRINTER
002d c3 e8 06     ; jp 0x6e8             | CARB
0030 c3 cb 04     ; jp 0x4cb             | STOP
0033 c3 e6 04     ; jp 0x4e6             | PROCH
0036 18 14        ; jr 0x4c              | INTRET
0038 18 18        ; jr 0x52              |
003a 14           ; inc d                |
003b 00           ; nop                  |
003c c3 67 07     ; jp 0x767             | SHIFTY

;Return Address (copied to 4080)
003f c3 3f 00     ; jp 0x3f              |

;JP to interrupt routine (copied to 4083)
0042 c3 b1 02     ; jp 0x2b1             |

;JP to wait-for-keyboard-or-printer
0045 c3 15 08     ; jp 0x815             |

;UNEXPLORED
0048 c9           ; ret                  |
0049 c9           ; ret                  |
004a c9           ; ret                  |
004b c9           ; ret                  |
004c c3 62 03     ; jp 0x362             |
004f c3 34 07     ; jp 0x734             |

;interrupt38 chain
0052 c3 de 01     ; jp 0x1de             |

;UNEXPLORED
0055 20 51        ; jr nz, 0xa8          |
0057 31 2d 4c     ; ld sp, 0x4c2d        |
005a 69           ; ld l, c              |
005b 74           ; ld (hl), h           |
005c 65           ; ld h, l              |
005d 00           ; nop                  |
005e 20 51        ; jr nz, 0xb1          |
0060 31 2d 4d     ; ld sp, 0x4d2d        |
0063 61           ; ld h, c              |
0064 67           ; ld h, a              |
0065 6e           ; ld l, (hl)           |
0066 75           ; ld (hl), l           |
0067 73           ; ld (hl), e           |
0068 20 6b        ; jr nz, 0xd5          |
006a 6c           ; ld l, h              |
006b 61           ; ld h, c              |
006c 72           ; ld (hl), d           |
006d 20 74        ; jr nz, 0xe3          |
006f 69           ; ld l, c              |
0070 6c           ; ld l, h              |
0071 20 62        ; jr nz, 0xd5          |
0073 72           ; ld (hl), d           |
0074 75           ; ld (hl), l           |
0075 67           ; ld h, a              |
0076 65           ; ld h, l              |
0077 e1           ; pop hl               |
0078 22 81 40     ; ld (0x4081), hl      |
007b 21 14 42     ; ld hl, 0x4214        |
007e 0e 04        ; ld c, 0x4            |
0080 d1           ; pop de               |
0081 7b           ; ld a, e              |
0082 cd f4 00     ; call 0xf4            |
0085 7a           ; ld a, d              |
0086 cd f4 00     ; call 0xf4            |
0089 0d           ; dec c                |
008a 20 f4        ; jr nz, 0x80          |
008c 23           ; inc hl               |
008d 23           ; inc hl               |
008e 7a           ; ld a, d              |
008f 87           ; add a, a             |
0090 f5           ; push af              |
0091 5f           ; ld e, a              |
0092 7e           ; ld a, (hl)           |
0093 fe 30        ; cp 0x30              |
0095 28 52        ; jr z, 0xe9           |
0097 55           ; ld d, l              |
0098 2e 14        ; ld l, 0x14           |
009a 2b           ; dec hl               |
009b 7e           ; ld a, (hl)           |
009c fe 30        ; cp 0x30              |
009e 28 fa        ; jr z, 0x9a           |
00a0 7d           ; ld a, l              |
00a1 4f           ; ld c, a              |
00a2 3c           ; inc a                |
00a3 92           ; sub d                |
00a4 47           ; ld b, a              |
00a5 21 30 30     ; ld hl, 0x3030        |
00a8 22 02 42     ; ld (0x4202), hl      |
00ab 22 04 42     ; ld (0x4204), hl      |
00ae 26 42        ; ld h, 0x42           |
00b0 7b           ; ld a, e              |
00b1 69           ; ld l, c              |
00b2 23           ; inc hl               |
00b3 23           ; inc hl               |
00b4 fe 81        ; cp 0x81              |
00b6 da 4c 01     ; jp c, 0x14c          |
00b9 fe 8f        ; cp 0x8f              |
00bb 30 4e        ; jr nc, 0x10b         |
00bd d6 7b        ; sub 0x7b             |
00bf 6f           ; ld l, a              |
00c0 91           ; sub c                |
00c1 28 0c        ; jr z, 0xcf           |
00c3 30 42        ; jr nc, 0x107         |
00c5 15           ; dec d                |
00c6 04           ; inc b                |
00c7 0e 2e        ; ld c, 0x2e           |
00c9 7e           ; ld a, (hl)           |
00ca 71           ; ld (hl), c           |
00cb 2d           ; dec l                |
00cc 4f           ; ld c, a              |
00cd 20 fa        ; jr nz, 0xc9          |
00cf f1           ; pop af               |
00d0 30 05        ; jr nc, 0xd7          |
00d2 15           ; dec d                |
00d3 04           ; inc b                |
00d4 6a           ; ld l, d              |
00d5 36 2d        ; ld (hl), 0x2d        |
00d7 5a           ; ld e, d              |
00d8 16 42        ; ld d, 0x42           |
00da 78           ; ld a, b              |
00db fe 10        ; cp 0x10              |
00dd 38 02        ; jr c, 0xe1           |
00df 06 10        ; ld b, 0x10           |
00e1 48           ; ld c, b              |
00e2 06 00        ; ld b, 0x0            |
00e4 d5           ; push de              |
00e5 c5           ; push bc              |
00e6 c3 80 40     ; jp 0x4080            |
00e9 2c           ; inc l                |
00ea 04           ; inc b                |
00eb 05           ; dec b                |
00ec 20 a9        ; jr nz, 0x97          |
00ee 06 01        ; ld b, 0x1            |
00f0 16 13        ; ld d, 0x13           |
00f2 18 db        ; jr 0xcf              |

;binary to hex?
00f4 47           ; ld b, a              |
00f5 e6 0f        ; and 0xf              |
00f7 c6 30        ; add a, 0x30          |
00f9 2b           ; dec hl               |
00fa 77           ; ld (hl), a           |
00fb 2b           ; dec hl               |
00fc 78           ; ld a, b              |
00fd 0f           ; rrca                 |
00fe 0f           ; rrca                 |
00ff 0f           ; rrca                 |
0100 0f           ; rrca                 |
0101 e6 0f        ; and 0xf              |
0103 c6 30        ; add a, 0x30          |
0105 77           ; ld (hl), a           |
0106 c9           ; ret                  |

;UNEXPLORED
0107 80           ; add a, b             |
0108 47           ; ld b, a              |
0109 18 c4        ; jr 0xcf              |
010b 0e 2b        ; ld c, 0x2b           |
010d d6 80        ; sub 0x80             |
010f 5f           ; ld e, a              |
0110 7d           ; ld a, l              |
0111 fe 11        ; cp 0x11              |
0113 38 02        ; jr c, 0x117          |
0115 2e 11        ; ld l, 0x11           |
0117 71           ; ld (hl), c           |
0118 7a           ; ld a, d              |
0119 b7           ; or a                 |
011a 7b           ; ld a, e              |
011b ea 22 01     ; jp pe, 0x122         |
011e 79           ; ld a, c              |
011f d6 2c        ; sub 0x2c             |
0121 83           ; add a, e             |
0122 2d           ; dec l                |
0123 36 45        ; ld (hl), 0x45        |
0125 0e 2f        ; ld c, 0x2f           |
0127 23           ; inc hl               |
0128 23           ; inc hl               |
0129 0c           ; inc c                |
012a d6 0a        ; sub 0xa              |
012c 30 fb        ; jr nc, 0x129         |
012e c6 3a        ; add a, 0x3a          |
0130 47           ; ld b, a              |
0131 79           ; ld a, c              |
0132 fe 3a        ; cp 0x3a              |
0134 38 02        ; jr c, 0x138          |
0136 0e 39        ; ld c, 0x39           |
0138 71           ; ld (hl), c           |
0139 23           ; inc hl               |
013a 70           ; ld (hl), b           |
013b 15           ; dec d                |
013c 7d           ; ld a, l              |
013d 92           ; sub d                |
013e 3c           ; inc a                |
013f 47           ; ld b, a              |
0140 6a           ; ld l, d              |
0141 36 2e        ; ld (hl), 0x2e        |
0143 18 8a        ; jr 0xcf              |
0145 0e 2d        ; ld c, 0x2d           |
0147 2f           ; cpl                  |
0148 c6 81        ; add a, 0x81          |
014a 18 c3        ; jr 0x10f             |
014c fe 7c        ; cp 0x7c              |
014e 38 f5        ; jr c, 0x145          |
0150 d6 7b        ; sub 0x7b             |
0152 57           ; ld d, a              |
0153 6f           ; ld l, a              |
0154 91           ; sub c                |
0155 2f           ; cpl                  |
0156 3c           ; inc a                |
0157 47           ; ld b, a              |
0158 c3 c6 00     ; jp 0xc6              |
015b cd 06 18     ; call 0x1806          |
015e e1           ; pop hl               |
015f 22 81 40     ; ld (0x4081), hl      |
0162 c1           ; pop bc               |
0163 0c           ; inc c                |
0164 1e 00        ; ld e, 0x0            |
0166 43           ; ld b, e              |
0167 53           ; ld d, e              |
0168 e1           ; pop hl               |
0169 cd c2 01     ; call 0x1c2           |
016c 28 24        ; jr z, 0x192          |
016e 30 f9        ; jr nc, 0x169         |
0170 e5           ; push hl              |
0171 21 06 42     ; ld hl, 0x4206        |
0174 b6           ; or (hl)              |
0175 77           ; ld (hl), a           |
0176 cd 67 07     ; call 0x767           |
0179 e1           ; pop hl               |
017a 78           ; ld a, b              |
017b 92           ; sub d                |
017c 47           ; ld b, a              |
017d cd c2 01     ; call 0x1c2           |
0180 28 10        ; jr z, 0x192          |
0182 38 ec        ; jr c, 0x170          |
0184 fe 15        ; cp 0x15              |
0186 20 0a        ; jr nz, 0x192         |
0188 d5           ; push de              |
0189 e5           ; push hl              |
018a cd e8 06     ; call 0x6e8           |
018d 7b           ; ld a, e              |
018e 80           ; add a, b             |
018f e1           ; pop hl               |
0190 47           ; ld b, a              |
0191 d1           ; pop de               |
0192 78           ; ld a, b              |
0193 1f           ; rra                  |
0194 4f           ; ld c, a              |
0195 da 9c 01     ; jp c, 0x19c          |
0198 cd 67 07     ; call 0x767           |
019b 0d           ; dec c                |
019c 21 10 42     ; ld hl, 0x4210        |
019f 2b           ; dec hl               |
01a0 7d           ; ld a, l              |
01a1 fe 06        ; cp 0x6               |
01a3 28 04        ; jr z, 0x1a9          |
01a5 7e           ; ld a, (hl)           |
01a6 b7           ; or a                 |
01a7 28 f6        ; jr z, 0x19f          |
01a9 79           ; ld a, c              |
01aa 85           ; add a, l             |
01ab c6 3b        ; add a, 0x3b          |
01ad e6 7f        ; and 0x7f             |
01af b3           ; or e                 |
01b0 23           ; inc hl               |
01b1 77           ; ld (hl), a           |
01b2 c5           ; push bc              |
01b3 c5           ; push bc              |
01b4 c5           ; push bc              |
01b5 c5           ; push bc              |
01b6 cd 00 18     ; call 0x1800          |
01b9 c3 80 40     ; jp 0x4080            |
01bc 16 01        ; ld d, 0x1            |
01be 18 02        ; jr 0x1c2             |
01c0 1e 80        ; ld e, 0x80           |
01c2 0d           ; dec c                |
01c3 c8           ; ret z                |
01c4 7e           ; ld a, (hl)           |
01c5 e6 7f        ; and 0x7f             |
01c7 23           ; inc hl               |
01c8 d6 30        ; sub 0x30             |
01ca 38 05        ; jr c, 0x1d1          |
01cc fe 0a        ; cp 0xa               |
01ce c0           ; ret nz               |
01cf b7           ; or a                 |
01d0 c9           ; ret                  |
01d1 3c           ; inc a                |
01d2 3c           ; inc a                |
01d3 28 e7        ; jr z, 0x1bc          |
01d5 3c           ; inc a                |
01d6 28 e8        ; jr z, 0x1c0          |
01d8 3c           ; inc a                |
01d9 3c           ; inc a                |
01da 28 e6        ; jr z, 0x1c2          |
01dc b7           ; or a                 |
01dd c9           ; ret                  |

;interrupt routine()
01de f5           ; push af              |
01df c5           ; push bc              |
01e0 d5           ; push de              |
01e1 e5           ; push hl              |
01e2 c3 83 40     ; jp 0x4083            |

;start()
01e5 ed 56        ; im 0x1               |
01e7 3e 04        ; ld a, 0x4            | set keyboard mode 2 (ASM IO page 73)
01e9 d3 01        ; out (0x1), a         |
01eb 11 3f 00     ; ld de, 0x3f          | prepare registers for copy and clearing
01ee 21 80 40     ; ld hl, 0x4080        |
01f1 f9           ; ld sp, hl            |
01f2 eb           ; ex de, hl            |
01f3 01 09 00     ; ld bc, 0x9           |
01f6 ed b0        ; ldir                 | copy jump tables from 003f:0047 to 4080:4088
01f8 97           ; sub a                |
01f9 12           ; ld (de), a           |
01fa 1c           ; inc e                |
01fb 20 fb        ; jr nz, 0x1f8         | clear RAM from 4089 to 40ff
01fd 3e a0        ; ld a, 0xa0           | printer control - reset printer, raise ribbon
01ff d3 07        ; out (0x7), a         |
0201 db 05        ; in a, (0x5)          | printer status  - check result (0 is good)
0203 b7           ; or a                 |
0204 20 06        ; jr nz, 0x20c         |
0206 21 fd 07     ; ld hl, 0x7fd         |
0209 22 84 40     ; ld (0x4084), hl      |
020c cd 10 04     ; call 0x410           | clear keyboard buffer, update display

;Main program loop
020f 21 80 40     ; ld hl, 0x4080        | reset stack pointer to x4080
0212 f9           ; ld sp, hl            |
0213 cd 15 08     ; call 0x815           | CLRDK
0216 3a 8e 40     ; ld a, (0x408e)       | get a = Unused
0219 0f           ; rrca                 |
021a 38 15        ; jr c, 0x231          |
021c 21 89 40     ; ld hl, 0x4089        |
021f 7e           ; ld a, (hl)           | a = PLC (lsb of addr of last char loaded to printer buffer)
0220 23           ; inc hl               |
0221 96           ; sub (hl)             | ensure there are no buffered chars to print???
0222 20 ef        ; jr nz, 0x213         |
0224 db 0c        ; in a, (0xc)          | UNKNOWN INPUT from 0xc
0226 cb 77        ; bit 0x6, a           | check bit 6 - unknown
0228 20 07        ; jr nz, 0x231         |
022a 07           ; rlca                 |
022b 38 e6        ; jr c, 0x213          |
022d 3e 81        ; ld a, 0x81           |
022f d3 0c        ; out (0xc), a         | UNKNOWN OUTPUT to 0xc
0231 cd b3 04     ; call 0x4b3           | clear display
0234 db 1a        ; in a, (0x1a)         | Get status for disk 2
0236 b7           ; or a                 |
0237 28 0b        ; jr z, 0x244          | disk status == 0 -> Q1-Lite
0239 e6 08        ; and 0x8              | else if bit 3 (0x8) clear -> Q1-Magnus
023b 20 07        ; jr nz, 0x244         |
023d 21 5e 00     ; ld hl, 0x5e          | HL -> " Q1-Magnus klar til brug"
0240 0e 18        ; ld c, 0x18           |
0242 18 05        ; jr 0x249             |
0244 21 55 00     ; ld hl, 0x55          | HL -> " Q1-Lite"
0247 0e 16        ; ld c, 0x16           |
0249 cd a0 02     ; call 0x2a0           | get display width
024c 91           ; sub c                |
024d cb 3f        ; srl a                |
024f 47           ; ld b, a              |
0250 c5           ; push bc              |
0251 e5           ; push hl              |
0252 cd 93 02     ; call 0x293           | ???
0255 e1           ; pop hl               |
0256 0e 0a        ; ld c, 0xa            |
0258 cd 58 04     ; call 0x458           | print " Q1-Magnus/Lite"
025b 21 68 00     ; ld hl, 0x68          |
025e 0e 0e        ; ld c, 0xe            |
0260 cd 58 04     ; call 0x458           | print " Klar til brug"
0263 c1           ; pop bc               |
0264 db 04        ; in a, (0x4)          | get display status
0266 e6 18        ; and 0x18             | check if 40 or 80 bytes
0268 20 01        ; jr nz, 0x26b         |
026a 04           ; inc b                |
026b cd 93 02     ; call 0x293           |
026e 21 8e 40     ; ld hl, 0x408e        |
0271 cb 8e        ; res 0x1, (hl)        |
0273 cd da 03     ; call 0x3da           | get keyboard input (returns when command is entered)
0276 cd b3 04     ; call 0x4b3           | clear display

;load and run program
0279 21 0f 02     ; ld hl, 0x20f         | set return to Main loop
027c 22 81 40     ; ld (0x4081), hl      |
027f cd 0f 08     ; call 0x80f           | LOADER
0282 21 8e 40     ; ld hl, 0x408e        | USE OF FIELD REPORTED AS UNUSED
0285 cb ce        ; set 0x1, (hl)        |
0287 ca 80 40     ; jp z, 0x4080         | jump to loaded program start???
028a cd 18 08     ; call 0x818           | REPORT
028d cd 10 04     ; call 0x410           | clear keyboard buffer, update display
0290 c3 0f 02     ; jp 0x20f             | back to Main loop

;print "Q1 Lite/Magnus ..."
0293 21 55 00     ; ld hl, 0x55          | String "Q1 Lite"
0296 c5           ; push bc              |
0297 0e 01        ; ld c, 0x1            |
0299 cd 58 04     ; call 0x458           | display(SPC)
029c c1           ; pop bc               |
029d 10 f4        ; djnz 0x293           |
029f c9           ; ret                  |

;Display width?
02a0 db 04        ; in a, (0x4)          |
02a2 cb 5f        ; bit 0x3, a           |
02a4 3e 50        ; ld a, 0x50           | 80 characters
02a6 c0           ; ret nz               |
02a7 db 04        ; in a, (0x4)          |
02a9 cb 67        ; bit 0x4, a           |
02ab 3e 28        ; ld a, 0x28           | 40 characters
02ad c0           ; ret nz               |
02ae c6 07        ; add a, 0x7           |
02b0 c9           ; ret                  |

;interrupt processing routine()
02b1 cd d8 04     ; call 0x4d8           |
02b4 db 05        ; in a, (0x5)          |
02b6 b7           ; or a                 |
02b7 fa 62 03     ; jp m, 0x362          |
02ba 01 00 00     ; ld bc, 0x0           |
02bd 51           ; ld d, c              |
02be 59           ; ld e, c              |
02bf 3a 8d 40     ; ld a, (0x408d)       | get a = RIB
02c2 b7           ; or a                 |
02c3 28 02        ; jr z, 0x2c7          |
02c5 1e 0a        ; ld e, 0xa            |
02c7 21 89 40     ; ld hl, 0x4089        |
02ca 7e           ; ld a, (hl)           |
02cb 23           ; inc hl               |
02cc 96           ; sub (hl)             |
02cd 28 5d        ; jr z, 0x32c          |
02cf 6e           ; ld l, (hl)           |
02d0 26 41        ; ld h, 0x41           |
02d2 2c           ; inc l                |
02d3 7d           ; ld a, l              |
02d4 f6 80        ; or 0x80              |
02d6 6f           ; ld l, a              |
02d7 32 8a 40     ; ld (0x408a), a       | set PTC = a
02da 7e           ; ld a, (hl)           |
02db 62           ; ld h, d              |
02dc 6b           ; ld l, e              |
02dd 3c           ; inc a                |
02de fe 20        ; cp 0x20              |
02e0 28 4a        ; jr z, 0x32c          |
02e2 3d           ; dec a                |
02e3 fe 20        ; cp 0x20              |
02e5 38 06        ; jr c, 0x2ed          |
02e7 20 43        ; jr nz, 0x32c         |
02e9 21 0a 00     ; ld hl, 0xa           |
02ec 19           ; add hl, de           |
02ed fe 08        ; cp 0x8               |
02ef 20 04        ; jr nz, 0x2f5         |
02f1 21 f6 ff     ; ld hl, 0xfff6        |
02f4 19           ; add hl, de           |
02f5 fe 0d        ; cp 0xd               |
02f7 20 08        ; jr nz, 0x301         |
02f9 2a 8b 40     ; ld hl, (0x408b)      | get hl = POS
02fc f5           ; push af              |
02fd cd 7f 06     ; call 0x67f           |
0300 f1           ; pop af               |
0301 eb           ; ex de, hl            |
0302 69           ; ld l, c              |
0303 60           ; ld h, b              |
0304 fe 02        ; cp 0x2               |
0306 20 02        ; jr nz, 0x30a         |
0308 13           ; inc de               |
0309 13           ; inc de               |
030a fe 06        ; cp 0x6               |
030c 20 01        ; jr nz, 0x30f         |
030e 13           ; inc de               |
030f fe 0d        ; cp 0xd               |
0311 28 02        ; jr z, 0x315          |
0313 fe 0a        ; cp 0xa               |
0315 20 04        ; jr nz, 0x31b         |
0317 21 08 00     ; ld hl, 0x8           |
031a 09           ; add hl, bc           |
031b fe 01        ; cp 0x1               |
031d 20 04        ; jr nz, 0x323         |
031f 2b           ; dec hl               |
0320 2b           ; dec hl               |
0321 2b           ; dec hl               |
0322 2b           ; dec hl               |
0323 fe 03        ; cp 0x3               |
0325 20 01        ; jr nz, 0x328         |
0327 23           ; inc hl               |
0328 44           ; ld b, h              |
0329 4d           ; ld c, l              |
032a 18 9b        ; jr 0x2c7             |
032c 32 8d 40     ; ld (0x408d), a       | set RIB = a
032f f5           ; push af              |
0330 c5           ; push bc              |
0331 7a           ; ld a, d              |
0332 b3           ; or e                 |
0333 28 22        ; jr z, 0x357          |
0335 2a 8b 40     ; ld hl, (0x408b)      | get hl = POS
0338 19           ; add hl, de           |
0339 22 8b 40     ; ld (0x408b), hl      | set POS = hl
033c 0e 20        ; ld c, 0x20           |
033e 30 08        ; jr nc, 0x348         |
0340 0e 24        ; ld c, 0x24           |
0342 eb           ; ex de, hl            |
0343 cd 7f 06     ; call 0x67f           |
0346 eb           ; ex de, hl            |
0347 b7           ; or a                 |
0348 7a           ; ld a, d              |
0349 1f           ; rra                  |
034a 57           ; ld d, a              |
034b 7b           ; ld a, e              |
034c 1f           ; rra                  |
034d 5f           ; ld e, a              |
034e 1f           ; rra                  |
034f 1f           ; rra                  |
0350 e6 40        ; and 0x40             |
0352 b1           ; or c                 |
0353 4f           ; ld c, a              |
0354 cd 6b 03     ; call 0x36b           |
0357 d1           ; pop de               |
0358 0e 28        ; ld c, 0x28           |
035a cd 68 03     ; call 0x368           |
035d f1           ; pop af               |
035e 28 02        ; jr z, 0x362          |
0360 d3 05        ; out (0x5), a         |
0362 e1           ; pop hl               |
0363 d1           ; pop de               |
0364 c1           ; pop bc               |
0365 f1           ; pop af               |
0366 fb           ; ei                   |
0367 c9           ; ret                  |

;UNEXPLORED
0368 7b           ; ld a, e              |
0369 b2           ; or d                 |
036a c8           ; ret z                |
036b 62           ; ld h, d              |
036c 6b           ; ld l, e              |
036d 14           ; inc d                |
036e 15           ; dec d                |
036f f2 79 03     ; jp p, 0x379          |
0372 0c           ; inc c                |
0373 0c           ; inc c                |
0374 0c           ; inc c                |
0375 0c           ; inc c                |
0376 cd 7f 06     ; call 0x67f           |
0379 7c           ; ld a, h              |
037a b1           ; or c                 |
037b d3 07        ; out (0x7), a         | move printer carriage
037d 7d           ; ld a, l              |
037e d3 06        ; out (0x6), a         |
0380 c9           ; ret                  |

;text string - CLR, PRINTER FAULT
0381 0d           ; dec c                |
0382 50           ; ld d, b              |
0383 52           ; ld d, d              |
0384 49           ; ld c, c              |
0385 4e           ; ld c, (hl)           |
0386 54           ; ld d, h              |
0387 45           ; ld b, l              |
0388 52           ; ld d, d              |
0389 20 46        ; jr nz, 0x3d1         |
038b 41           ; ld b, c              |
038c 55           ; ld d, l              |
038d 4c           ; ld c, h              |
038e 54           ; ld d, h              |

;check printer status
038f 0c           ; inc c                |
0390 0d           ; dec c                |
0391 c8           ; ret z                |
0392 db 05        ; in a, (0x5)          |
0394 cb 6f        ; bit 0x5, a           | test for out of ribbon
0396 28 10        ; jr z, 0x3a8          |
0398 d9           ; exx                  |
0399 0e 0e        ; ld c, 0xe            |
039b 21 81 03     ; ld hl, 0x381         |
039e cd 58 04     ; call 0x458           | display PRINTER FAULT
03a1 cd cb 04     ; call 0x4cb           |
03a4 cd b3 04     ; call 0x4b3           |
03a7 d9           ; exx                  |
03a8 7e           ; ld a, (hl)           |
03a9 b7           ; or a                 |
03aa 28 1e        ; jr z, 0x3ca          |
03ac e5           ; push hl              |
03ad 21 8a 40     ; ld hl, 0x408a        |
03b0 7e           ; ld a, (hl)           |
03b1 2b           ; dec hl               |
03b2 96           ; sub (hl)             |
03b3 e6 7f        ; and 0x7f             |
03b5 3d           ; dec a                |
03b6 28 15        ; jr z, 0x3cd          |
03b8 7e           ; ld a, (hl)           |
03b9 3c           ; inc a                |
03ba f6 80        ; or 0x80              |
03bc e1           ; pop hl               |
03bd 5f           ; ld e, a              |
03be 16 41        ; ld d, 0x41           |
03c0 7e           ; ld a, (hl)           |
03c1 12           ; ld (de), a           |
03c2 7b           ; ld a, e              |
03c3 32 89 40     ; ld (0x4089), a       | set PLC = a
03c6 23           ; inc hl               |
03c7 0d           ; dec c                |
03c8 20 c8        ; jr nz, 0x392         |
03ca f3           ; di                   |
03cb ff           ; rst 0x38             |

;UNEXPLORED
03cd c5           ; push bc              |
03ce cd 86 40     ; call 0x4086          |
03d1 c1           ; pop bc               |
03d2 e1           ; pop hl               |
03d3 f3           ; di                   |
03d4 ff           ; rst 0x38             |

;UNEXPLORED
03d5 18 b8        ; jr 0x38f             | check printer status
03d7 cd 10 04     ; call 0x410           | clear keyboard buffer, update display
03da cd a9 04     ; call 0x4a9           | get keyboard input, result in a
03dd 3a 92 40     ; ld a, (0x4092)       | get a = TOOK
03e0 6f           ; ld l, a              |
03e1 26 41        ; ld h, 0x41           |
03e3 0e 00        ; ld c, 0x0            |
03e5 7e           ; ld a, (hl)           |
03e6 2c           ; inc l                |
03e7 fa d7 03     ; jp m, 0x3d7          |
03ea fe 20        ; cp 0x20              | ignore leading spaces (0x20)
03ec 28 f7        ; jr z, 0x3e5          |
03ee 7d           ; ld a, l              |
03ef 3d           ; dec a                |
03f0 32 92 40     ; ld (0x4092), a       | set TOOK = a
03f3 06 08        ; ld b, 0x8            |
03f5 0c           ; inc c                |
03f6 7e           ; ld a, (hl)           |
03f7 23           ; inc hl               |
03f8 fe 30        ; cp 0x30              |
03fa 05           ; dec b                |
03fb 28 02        ; jr z, 0x3ff          |
03fd 30 f6        ; jr nc, 0x3f5         |
03ff 21 da 40     ; ld hl, 0x40da        |
0402 06 08        ; ld b, 0x8            |
0404 2b           ; dec hl               |
0405 36 20        ; ld (hl), 0x20        |
0407 10 fb        ; djnz 0x404           |
0409 18 72        ; jr 0x47d             |

;clear keyboard buffer, update display
0410 21 00 41     ; ld hl, 0x4100        |
0413 f3           ; di                   |
0414 36 00        ; ld (hl), 0x0         |
0416 2c           ; inc l                |
0417 3e 20        ; ld a, 0x20           |
0419 77           ; ld (hl), a           |
041a 2c           ; inc l                |
041b f2 19 04     ; jp p, 0x419          |
041e 32 94 40     ; ld (0x4094), a       | set UNDER = a
0421 cd 53 05     ; call 0x553           | update display
0424 97           ; sub a                | a = 0
0425 32 92 40     ; ld (0x4092), a       | set TOOK = a
0428 32 95 40     ; ld (0x4095), a       | set KSIZ = a
042b 32 93 40     ; ld (0x4093), a       | set CURSE = a
042e 32 98 40     ; ld (0x4098), a       | set ACTK = a
0431 32 8f 40     ; ld (0x408f), a       | set HEXX = a
0434 32 90 40     ; ld (0x4090), a       | set INSF = a
0437 ff           ; rst 0x38             |
0438 c9           ; ret                  |

;UNEXPLORED
0439 ed 5b 96 40  ; ld de, (0x4096)      | get de = OSEZ (# chars used for display)
043d 3e 05        ; ld a, 0x5            |
043f d3 04        ; out (0x4), a         | display ctrl (0x05) Reset, Unbuffer
0441 3e 08        ; ld a, 0x8            |
0443 1c           ; inc e                |
0444 cd 4e 04     ; call 0x44e           |
0447 15           ; dec d                |
0448 f8           ; ret m                |
0449 cd 50 04     ; call 0x450           |
044c 18 f9        ; jr 0x447             |

;print A, E times (entry 0x450)
044e 1d           ; dec e                |
044f c8           ; ret z                |
0450 d3 04        ; out (0x4), a         |
0452 1d           ; dec e                |
0453 c8           ; ret z                |
0454 d3 04        ; out (0x4), a         |
0456 18 f6        ; jr 0x44e             |

;display() - string=HL, len=C
0458 f3           ; di                   |
0459 cd 39 04     ; call 0x439           |
045c ed 5b 96 40  ; ld de, (0x4096)      | get de = OSEZ (# chars used for display)
0460 0c           ; inc c                |
0461 0d           ; dec c                |
0462 28 10        ; jr z, 0x474          |
0464 7e           ; ld a, (hl)           |
0465 23           ; inc hl               |
0466 b7           ; or a                 |
0467 28 0b        ; jr z, 0x474          |
0469 d3 03        ; out (0x3), a         |
046b 13           ; inc de               |
046c fe 0d        ; cp 0xd               |
046e cc b3 04     ; call z, 0x4b3        |
0471 0d           ; dec c                |
0472 20 f0        ; jr nz, 0x464         |
0474 eb           ; ex de, hl            |
0475 22 96 40     ; ld (0x4096), hl      | set OSEZ (# chars used for display) = hl
0478 cd 56 05     ; call 0x556           |
047b fb           ; ei                   |
047c c9           ; ret                  |

;KEYIN()
047d e5           ; push hl              |
047e cd a9 04     ; call 0x4a9           |
0481 d1           ; pop de               |
0482 21 92 40     ; ld hl, 0x4092        |
0485 6e           ; ld l, (hl)           |
0486 26 41        ; ld h, 0x41           |
0488 3a 95 40     ; ld a, (0x4095)       | get a = KSIZ
048b 47           ; ld b, a              |
048c 0c           ; inc c                |
048d 78           ; ld a, b              |
048e bd           ; cp l                 |
048f 28 0e        ; jr z, 0x49f          |
0491 0d           ; dec c                |
0492 28 06        ; jr z, 0x49a          |
0494 7e           ; ld a, (hl)           |
0495 12           ; ld (de), a           |
0496 23           ; inc hl               |
0497 13           ; inc de               |
0498 18 f3        ; jr 0x48d             |
049a 7d           ; ld a, l              |
049b 32 92 40     ; ld (0x4092), a       | set TOOK = a
049e c9           ; ret                  |
049f 0d           ; dec c                |
04a0 ca 10 04     ; jp z, 0x410          |
04a3 3e 20        ; ld a, 0x20           |
04a5 12           ; ld (de), a           |
04a6 13           ; inc de               |
04a7 18 f6        ; jr 0x49f             |

;wait for keyboard
04a9 3a 98 40     ; ld a, (0x4098)       | get a = ACTK
04ac b7           ; or a                 |
04ad c0           ; ret nz               |
04ae cd 86 40     ; call 0x4086          |
04b1 18 f6        ; jr 0x4a9             |

;clear display?
04b3 11 00 04     ; ld de, 0x400         |
04b6 3e 20        ; ld a, 0x20           |
04b8 d3 03        ; out (0x3), a         |
04ba d3 03        ; out (0x3), a         |
04bc 1d           ; dec e                |
04bd 20 f9        ; jr nz, 0x4b8         |
04bf 15           ; dec d                |
04c0 20 f6        ; jr nz, 0x4b8         |
04c2 ed 53 96 40  ; ld (0x4096), de      | set OSEZ (# chars used for display) = de
04c6 3e 05        ; ld a, 0x5            |
04c8 d3 04        ; out (0x4), a         |
04ca c9           ; ret                  |

;disable interrupt, get key?, enable interrupt
04cb f3           ; di                   |
04cc cd d1 04     ; call 0x4d1           |
04cf fb           ; ei                   |
04d0 c9           ; ret                  |

;STOP, wait for key GO (0xe)
04d1 db 01        ; in a, (0x1)          |
04d3 fe 0e        ; cp 0xe               | key: GO
04d5 20 fa        ; jr nz, 0x4d1         |
04d7 c9           ; ret                  |

;read_key()
04d8 db 01        ; in a, (0x1)          |
04da b7           ; or a                 |
04db c8           ; ret z                |
04dc fe 0f        ; cp 0xf               | key: STOP
04de 28 f1        ; jr z, 0x4d1          |
04e0 21 98 40     ; ld hl, 0x4098        |
04e3 34           ; inc (hl)             |
04e4 35           ; dec (hl)             |
04e5 c0           ; ret nz               |
04e6 21 93 40     ; ld hl, 0x4093        |
04e9 11 94 40     ; ld de, 0x4094        |
04ec 46           ; ld b, (hl)           |
04ed 48           ; ld c, b              |
04ee fe 9a        ; cp 0x9a              |
04f0 ca 99 05     ; jp z, 0x599          |
04f3 fe 9e        ; cp 0x9e              |
04f5 ca a8 05     ; jp z, 0x5a8          |
04f8 30 42        ; jr nc, 0x53c         |
04fa fe 84        ; cp 0x84              |
04fc 30 4a        ; jr nc, 0x548         |
04fe fe 1b        ; cp 0x1b              | key: CLEAR ENTRY
0500 ca 10 04     ; jp z, 0x410          |
0503 fe 1e        ; cp 0x1e              | key: INSERT MODE
0505 ca d4 05     ; jp z, 0x5d4          |
0508 fe 1d        ; cp 0x1d              | key: DEL CHAR
050a ca f6 05     ; jp z, 0x5f6          |
050d fe 10        ; cp 0x10              | key: REV TAB
050f ca e9 05     ; jp z, 0x5e9          |
0512 fe 09        ; cp 0x9               | key: TAB
0514 ca da 05     ; jp z, 0x5da          |
0517 fe 1a        ; cp 0x1a              | key: 0x1a undocumented
0519 ca ce 05     ; jp z, 0x5ce          |
051c fe 04        ; cp 0x4               | key: CORR
051e 20 09        ; jr nz, 0x529         |
0520 1a           ; ld a, (de)           |
0521 0d           ; dec c                |
0522 f2 83 05     ; jp p, 0x583          |
0525 0c           ; inc c                |
0526 c3 83 05     ; jp 0x583             |
0529 38 11        ; jr c, 0x53c          |
052b fe 1c        ; cp 0x1c              | key: CHAR ADV
052d 20 03        ; jr nz, 0x532         |
052f 1a           ; ld a, (de)           |
0530 18 4c        ; jr 0x57e             |
0532 30 08        ; jr nc, 0x53c         |
0534 fe 0b        ; cp 0xb               | key: CLEAR ENTRY
0536 30 10        ; jr nc, 0x548         |
0538 fe 08        ; cp 0x8               | key: 0x08 undocumented
053a 38 0c        ; jr c, 0x548          |
053c e6 7f        ; and 0x7f             |
053e fe 03        ; cp 0x3               | key: TAB SET
0540 20 21        ; jr nz, 0x563         |
0542 cd b5 05     ; call 0x5b5           |
0545 b6           ; or (hl)              |
0546 77           ; ld (hl), a           |
0547 c9           ; ret                  |

;UNEXPLORED
0548 32 98 40     ; ld (0x4098), a       | set ACTK = a
054b 32 91 40     ; ld (0x4091), a       | set FUNKEY = a
054e 1a           ; ld a, (de)           |
054f 6e           ; ld l, (hl)           |
0550 26 41        ; ld h, 0x41           |
0552 77           ; ld (hl), a           |

;updis() - called after printing line?
0553 cd 39 04     ; call 0x439           |
0556 21 00 41     ; ld hl, 0x4100        |
0559 3a 95 40     ; ld a, (0x4095)       | get a = KSIZ
055c 47           ; ld b, a              |
055d 04           ; inc b                |
055e 0e 03        ; ld c, 0x3            |
0560 ed b3        ; otir                 | z80 otir instruction - B bytes from HL to port C
0562 c9           ; ret                  |

;handle tab clear (clears tab bit in hl?)
0563 fe 02        ; cp 0x2               | key: TAB CLR
0565 20 07        ; jr nz, 0x56e         |
0567 cd b5 05     ; call 0x5b5           |
056a 2f           ; cpl                  |
056b a6           ; and (hl)             |
056c 77           ; ld (hl), a           |
056d c9           ; ret                  |

;unknown HEXX function?
056e 21 8f 40     ; ld hl, 0x408f        | HEXX
0571 34           ; inc (hl)             |
0572 35           ; dec (hl)             |
0573 c2 07 06     ; jp nz, 0x607         |
0576 21 90 40     ; ld hl, 0x4090        | INSF
0579 34           ; inc (hl)             |
057a 35           ; dec (hl)             |
057b c4 2b 06     ; call nz, 0x62b       |
057e 0c           ; inc c                |
057f f2 83 05     ; jp p, 0x583          |
0582 0d           ; dec c                |
0583 26 41        ; ld h, 0x41           |
0585 68           ; ld l, b              |
0586 77           ; ld (hl), a           |
0587 69           ; ld l, c              |

;update cursor position and current size of line
0588 7e           ; ld a, (hl)           |
0589 36 00        ; ld (hl), 0x0         |
058b 12           ; ld (de), a           |
058c 21 93 40     ; ld hl, 0x4093        | CURSE (cursor position)
058f 71           ; ld (hl), c           |
0590 23           ; inc hl               |
0591 23           ; inc hl               |
0592 7e           ; ld a, (hl)           |
0593 b9           ; cp c                 |
0594 30 bd        ; jr nc, 0x553         |
0596 71           ; ld (hl), c           |
0597 18 ba        ; jr 0x553             | update display

;unknown (on key 0x9a?)
0599 cd a0 02     ; call 0x2a0           |
059c ed 44        ; neg                  |
059e 81           ; add a, c             |
059f 4f           ; ld c, a              |
05a0 1a           ; ld a, (de)           |
05a1 f2 83 05     ; jp p, 0x583          |
05a4 0e 00        ; ld c, 0x0            |
05a6 18 db        ; jr 0x583             |

;unknown (on key 0x9e?)
05a8 cd a0 02     ; call 0x2a0           |
05ab 81           ; add a, c             |
05ac 4f           ; ld c, a              |
05ad 1a           ; ld a, (de)           |
05ae f2 83 05     ; jp p, 0x583          |
05b1 0e 7f        ; ld c, 0x7f           |
05b3 18 ce        ; jr 0x583             |

;get tab position bit??
05b5 79           ; ld a, c              |
05b6 e6 f8        ; and 0xf8             |
05b8 0f           ; rrca                 |
05b9 0f           ; rrca                 |
05ba 0f           ; rrca                 |
05bb c6 c0        ; add a, 0xc0          | hl = tab positions
05bd 26 40        ; ld h, 0x40           |
05bf 6f           ; ld l, a              |
05c0 79           ; ld a, c              |
05c1 e6 07        ; and 0x7              |
05c3 d5           ; push de              |
05c4 57           ; ld d, a              |
05c5 3e 80        ; ld a, 0x80           |
05c7 15           ; dec d                |
05c8 07           ; rlca                 |
05c9 f2 c7 05     ; jp p, 0x5c7          |
05cc d1           ; pop de               |
05cd c9           ; ret                  |

;something with HEX last key
05ce 3e 81        ; ld a, 0x81           |
05d0 32 8f 40     ; ld (0x408f), a       | set HEXX = a
05d3 c9           ; ret                  |

;Toggle INSERT mode (on key 0x1e)
05d4 21 90 40     ; ld hl, 0x4090        | hl = INSF
05d7 ae           ; xor (hl)             |
05d8 77           ; ld (hl), a           |
05d9 c9           ; ret                  |

;tab()
05da 0c           ; inc c                |
05db 1a           ; ld a, (de)           |
05dc fa 82 05     ; jp m, 0x582          |
05df cd b5 05     ; call 0x5b5           |
05e2 a6           ; and (hl)             |
05e3 28 f5        ; jr z, 0x5da          |
05e5 1a           ; ld a, (de)           |
05e6 c3 83 05     ; jp 0x583             |

;UNEXPLORED
05e7 83           ; add a, e             |
05e8 05           ; dec b                |

;rev_tab()
05e9 0d           ; dec c                |
05ea 1a           ; ld a, (de)           |
05eb fa 25 05     ; jp m, 0x525          |
05ee cd b5 05     ; call 0x5b5           |
05f1 a6           ; and (hl)             |
05f2 28 f5        ; jr z, 0x5e9          |
05f4 18 ef        ; jr 0x5e5             |

;del_char()
05f6 21 7f 41     ; ld hl, 0x417f        |
05f9 0e 20        ; ld c, 0x20           |
05fb 7d           ; ld a, l              |
05fc b8           ; cp b                 |
05fd 7e           ; ld a, (hl)           |
05fe 71           ; ld (hl), c           |
05ff 48           ; ld c, b              |
0600 ca 88 05     ; jp z, 0x588          | done - update cursor position and current size of line
0603 2d           ; dec l                |
0604 4f           ; ld c, a              |
0605 18 f4        ; jr 0x5fb             |

;hexx_input()?
0607 f6 20        ; or 0x20              |
0609 d6 30        ; sub 0x30             |
060b fe 10        ; cp 0x10              |
060d 38 02        ; jr c, 0x611          |
060f d6 27        ; sub 0x27             |
0611 35           ; dec (hl)             |
0612 34           ; inc (hl)             |
0613 f2 1d 06     ; jp p, 0x61d          |
0616 c6 10        ; add a, 0x10          |
0618 77           ; ld (hl), a           |
0619 1a           ; ld a, (de)           |
061a c3 83 05     ; jp 0x583             |
061d 4f           ; ld c, a              |
061e 7e           ; ld a, (hl)           |
061f 07           ; rlca                 |
0620 07           ; rlca                 |
0621 07           ; rlca                 |
0622 07           ; rlca                 |
0623 3d           ; dec a                |
0624 b1           ; or c                 |
0625 36 00        ; ld (hl), 0x0         |
0627 48           ; ld c, b              |
0628 c3 76 05     ; jp 0x576             |

;UNEXPLORED
062b 26 41        ; ld h, 0x41           |
062d 68           ; ld l, b              |
062e 2c           ; inc l                |
062f f8           ; ret m                |
0630 f5           ; push af              |
0631 1a           ; ld a, (de)           |
0632 4e           ; ld c, (hl)           |
0633 77           ; ld (hl), a           |
0634 79           ; ld a, c              |
0635 2c           ; inc l                |
0636 f2 32 06     ; jp p, 0x632          |
0639 48           ; ld c, b              |
063a f1           ; pop af               |
063b 21 95 40     ; ld hl, 0x4095        |
063e 34           ; inc (hl)             |
063f f0           ; ret p                |
0640 35           ; dec (hl)             |
0641 c9           ; ret                  |

;multiply() = de * bc
0642 3e 10        ; ld a, 0x10           |
0644 21 00 00     ; ld hl, 0x0           |
0647 29           ; add hl, hl           |
0648 eb           ; ex de, hl            |
0649 29           ; add hl, hl           |
064a eb           ; ex de, hl            |
064b 30 01        ; jr nc, 0x64e         |
064d 09           ; add hl, bc           |
064e 3d           ; dec a                |
064f 20 f6        ; jr nz, 0x647         |
0651 c9           ; ret                  |

;divide() = hl / de
0652 7a           ; ld a, d              |
0653 ac           ; xor h                |
0654 f5           ; push af              |
0655 aa           ; xor d                |
0656 fc 7f 06     ; call m, 0x67f        |
0659 29           ; add hl, hl           |
065a eb           ; ex de, hl            |
065b 24           ; inc h                |
065c 25           ; dec h                |
065d f4 7f 06     ; call p, 0x67f        |
0660 44           ; ld b, h              |
0661 4d           ; ld c, l              |
0662 21 00 00     ; ld hl, 0x0           |
0665 3e 0f        ; ld a, 0xf            |
0667 29           ; add hl, hl           |
0668 eb           ; ex de, hl            |
0669 29           ; add hl, hl           |
066a eb           ; ex de, hl            |
066b 30 01        ; jr nc, 0x66e         |
066d 23           ; inc hl               |
066e e5           ; push hl              |
066f 09           ; add hl, bc           |
0670 30 15        ; jr nc, 0x687         |
0672 13           ; inc de               |
0673 33           ; inc sp               |
0674 33           ; inc sp               |
0675 3d           ; dec a                |
0676 20 ef        ; jr nz, 0x667         |
0678 f1           ; pop af               |
0679 f0           ; ret p                |
067a eb           ; ex de, hl            |
067b cd 7f 06     ; call 0x67f           |
067e eb           ; ex de, hl            |
067f 7c           ; ld a, h              |
0680 2f           ; cpl                  |
0681 67           ; ld h, a              |
0682 7d           ; ld a, l              |
0683 2f           ; cpl                  |
0684 6f           ; ld l, a              |
0685 23           ; inc hl               |
0686 c9           ; ret                  |
0687 e1           ; pop hl               |
0688 18 eb        ; jr 0x675             |

;bin_to_string()
068a 01 00 00     ; ld bc, 0x0           |
068d 24           ; inc h                |
068e 25           ; dec h                |
068f f5           ; push af              |
0690 fc 7f 06     ; call m, 0x67f        |
0693 d5           ; push de              |
0694 c5           ; push bc              |
0695 11 0a 00     ; ld de, 0xa           |
0698 cd 52 06     ; call 0x652           | call divide() hl/10
069b 7d           ; ld a, l              |
069c c6 30        ; add a, 0x30          |
069e c1           ; pop bc               |
069f 0c           ; inc c                |
06a0 e1           ; pop hl               |
06a1 77           ; ld (hl), a           |
06a2 2b           ; dec hl               |
06a3 eb           ; ex de, hl            |
06a4 7c           ; ld a, h              |
06a5 b5           ; or l                 |
06a6 20 eb        ; jr nz, 0x693         |
06a8 13           ; inc de               |
06a9 f1           ; pop af               |
06aa f0           ; ret p                |
06ab 0c           ; inc c                |
06ac 3e 2d        ; ld a, 0x2d           |
06ae 1b           ; dec de               |
06af 12           ; ld (de), a           |
06b0 c9           ; ret                  |

;UNEXPLORED
06b1 cd 10 04     ; call 0x410           |
06b4 cd a9 04     ; call 0x4a9           |
06b7 21 92 40     ; ld hl, 0x4092        |
06ba 6e           ; ld l, (hl)           |
06bb 26 41        ; ld h, 0x41           |
06bd 3a 95 40     ; ld a, (0x4095)       | get a = KSIZ
06c0 95           ; sub l                |
06c1 4f           ; ld c, a              |
06c2 47           ; ld b, a              |
06c3 28 ec        ; jr z, 0x6b1          |
06c5 0c           ; inc c                |
06c6 cd c2 01     ; call 0x1c2           |
06c9 28 e6        ; jr z, 0x6b1          |
06cb 30 f9        ; jr nc, 0x6c6         |
06cd cd c2 01     ; call 0x1c2           |
06d0 28 06        ; jr z, 0x6d8          |
06d2 38 f9        ; jr c, 0x6cd          |
06d4 fe 15        ; cp 0x15              |
06d6 28 f5        ; jr z, 0x6cd          |
06d8 d1           ; pop de               |
06d9 78           ; ld a, b              |
06da 91           ; sub c                |
06db 4f           ; ld c, a              |
06dc 21 40 42     ; ld hl, 0x4240        |
06df e5           ; push hl              |
06e0 c5           ; push bc              |
06e1 d5           ; push de              |
06e2 cd 7d 04     ; call 0x47d           |
06e5 c3 5b 01     ; jp 0x15b             |
06e8 11 00 00     ; ld de, 0x0           |
06eb 0c           ; inc c                |
06ec 0d           ; dec c                |
06ed c8           ; ret z                |
06ee 7e           ; ld a, (hl)           |
06ef e6 7f        ; and 0x7f             |
06f1 23           ; inc hl               |
06f2 d6 30        ; sub 0x30             |
06f4 38 2d        ; jr c, 0x723          |
06f6 fe 0a        ; cp 0xa               |
06f8 30 f2        ; jr nc, 0x6ec         |
06fa 2b           ; dec hl               |
06fb e5           ; push hl              |
06fc 62           ; ld h, d              |
06fd 6b           ; ld l, e              |
06fe 29           ; add hl, hl           |
06ff 38 0d        ; jr c, 0x70e          |
0701 29           ; add hl, hl           |
0702 38 0a        ; jr c, 0x70e          |
0704 19           ; add hl, de           |
0705 38 07        ; jr c, 0x70e          |
0707 29           ; add hl, hl           |
0708 38 04        ; jr c, 0x70e          |
070a 5f           ; ld e, a              |
070b 16 00        ; ld d, 0x0            |
070d 19           ; add hl, de           |
070e eb           ; ex de, hl            |
070f e1           ; pop hl               |
0710 d8           ; ret c                |
0711 0d           ; dec c                |
0712 c8           ; ret z                |
0713 23           ; inc hl               |
0714 7e           ; ld a, (hl)           |
0715 f6 80        ; or 0x80              |
0717 d6 30        ; sub 0x30             |
0719 f0           ; ret p                |
071a e6 7f        ; and 0x7f             |
071c fe 0a        ; cp 0xa               |
071e 38 db        ; jr c, 0x6fb          |
0720 14           ; inc d                |
0721 15           ; dec d                |
0722 c9           ; ret                  |
0723 d6 fe        ; sub 0xfe             |
0725 c8           ; ret z                |
0726 3c           ; inc a                |
0727 20 c3        ; jr nz, 0x6ec         |
0729 cd ec 06     ; call 0x6ec           |
072c d8           ; ret c                |
072d eb           ; ex de, hl            |
072e cd 7f 06     ; call 0x67f           |
0731 bf           ; cp a                 |
0732 eb           ; ex de, hl            |
0733 c9           ; ret                  |

;UNEXPLORED
0734 e5           ; push hl              |
0735 0c           ; inc c                |
0736 04           ; inc b                |
0737 2b           ; dec hl               |
0738 23           ; inc hl               |
0739 0d           ; dec c                |
073a 28 26        ; jr z, 0x762          |
073c 7e           ; ld a, (hl)           |
073d b7           ; or a                 |
073e 28 22        ; jr z, 0x762          |
0740 e5           ; push hl              |
0741 d5           ; push de              |
0742 c5           ; push bc              |
0743 0c           ; inc c                |
0744 05           ; dec b                |
0745 28 11        ; jr z, 0x758          |
0747 1a           ; ld a, (de)           |
0748 b7           ; or a                 |
0749 28 0d        ; jr z, 0x758          |
074b 0d           ; dec c                |
074c 28 05        ; jr z, 0x753          |
074e 13           ; inc de               |
074f be           ; cp (hl)              |
0750 23           ; inc hl               |
0751 28 f1        ; jr z, 0x744          |
0753 c1           ; pop bc               |
0754 d1           ; pop de               |
0755 e1           ; pop hl               |
0756 18 e0        ; jr 0x738             |
0758 f1           ; pop af               |
0759 f1           ; pop af               |
075a d1           ; pop de               |
075b e1           ; pop hl               |
075c cd 7f 06     ; call 0x67f           |
075f 19           ; add hl, de           |
0760 23           ; inc hl               |
0761 c9           ; ret                  |
0762 f1           ; pop af               |
0763 21 00 00     ; ld hl, 0x0           |
0766 c9           ; ret                  |

;called from x003c (nibbl rotation?)
0767 c5           ; push bc              |
0768 06 10        ; ld b, 0x10           |
076a 21 00 42     ; ld hl, 0x4200        |
076d af           ; xor a                |
076e ed 6f        ; rld                  |
0770 23           ; inc hl               |
0771 10 fb        ; djnz 0x76e           |
0773 c1           ; pop bc               |
0774 c9           ; ret                  |

;UNEXPLORED
0775 cd d8 04     ; call 0x4d8           | call getkey?
0778 21 89 40     ; ld hl, 0x4089        |
077b 7e           ; ld a, (hl)           |
077c 23           ; inc hl               |
077d be           ; cp (hl)              |
077e 28 3c        ; jr z, 0x7bc          |
0780 db 0c        ; in a, (0xc)          | unknown input (0xc undocumented, rs232?)
0782 cb 77        ; bit 0x6, a           |
0784 28 06        ; jr z, 0x78c          |
0786 3e c0        ; ld a, 0xc0           |
0788 d3 0c        ; out (0xc), a         |
078a 18 30        ; jr 0x7bc             |
078c e6 80        ; and 0x80             |
078e 20 2c        ; jr nz, 0x7bc         |
0790 21 89 40     ; ld hl, 0x4089        |
0793 7e           ; ld a, (hl)           |
0794 23           ; inc hl               |
0795 96           ; sub (hl)             |
0796 28 24        ; jr z, 0x7bc          |
0798 6e           ; ld l, (hl)           |
0799 26 41        ; ld h, 0x41           |
079b 2c           ; inc l                |
079c 7d           ; ld a, l              |
079d f6 80        ; or 0x80              |
079f 32 8a 40     ; ld (0x408a), a       | set PTC = a
07a2 6f           ; ld l, a              |
07a3 7e           ; ld a, (hl)           |
07a4 fe 0d        ; cp 0xd               |
07a6 20 04        ; jr nz, 0x7ac         |
07a8 3e 0a        ; ld a, 0xa            |
07aa 18 06        ; jr 0x7b2             |
07ac fe 0a        ; cp 0xa               |
07ae 20 02        ; jr nz, 0x7b2         |
07b0 3e 0d        ; ld a, 0xd            |
07b2 fe 7f        ; cp 0x7f              |
07b4 20 02        ; jr nz, 0x7b8         |
07b6 3e 7e        ; ld a, 0x7e           |
07b8 e6 7f        ; and 0x7f             |
07ba d3 0c        ; out (0xc), a         |
07bc c3 36 00     ; jp 0x36              |
07bf 41           ; ld b, c              |
07c0 7e           ; ld a, (hl)           |
07c1 12           ; ld (de), a           |
07c2 7b           ; ld a, e              |
07c3 32 89 40     ; ld (0x4089), a       | set PLC = a
07c6 23           ; inc hl               |
07c7 0d           ; dec c                |
07c8 20 c8        ; jr nz, 0x792         |
07ca f3           ; di                   |
07cb ff           ; rst 0x38             |
07cc c9           ; ret                  |
07cd c5           ; push bc              |
07ce cd 86 40     ; call 0x4086          |
07d1 c1           ; pop bc               |
07d2 e1           ; pop hl               |
07d3 f3           ; di                   |
07d4 ff           ; rst 0x38             |
07d5 18 b8        ; jr 0x78f             |
07d7 cd 10 04     ; call 0x410           |
07da cd a9 04     ; call 0x4a9           |
07dd 3a 92 40     ; ld a, (0x4092)       | get a = TOOK
07e0 6f           ; ld l, a              |
07e1 26 41        ; ld h, 0x41           |
07e3 0e 00        ; ld c, 0x0            |
07e5 7e           ; ld a, (hl)           |
07e6 2c           ; inc l                |
07e7 fa d7 03     ; jp m, 0x3d7          |
07ea fe 20        ; cp 0x20              |
07ec 28 f7        ; jr z, 0x7e5          |
07ee 7d           ; ld a, l              |
07ef 3d           ; dec a                |
07f0 32 92 40     ; ld (0x4092), a       | set TOOK = a
07f3 06 08        ; ld b, 0x8            |
07f5 0c           ; inc c                |
07f6 7e           ; ld a, (hl)           |
07f7 23           ; inc hl               |
07f8 fe 30        ; cp 0x30              |
07fa 05           ; dec b                |
07fb 28 02        ; jr z, 0x7ff          |
07fd c3 75 07     ; jp 0x775             |

;READ vec
0800 c3 8e 08     ; jp 0x88e             |

;WRITE vec
0803 c3 4a 09     ; jp 0x94a             |

;REWRITE vec
0806 c3 75 09     ; jp 0x975             |

;KEY[SEARCH] vec
0809 c3 4f 0e     ; jp 0xe4f             |

;OPEN vec
080c c3 30 08     ; jp 0x830             |

;LOADER vec
080f c3 1e 0d     ; jp 0xd1e             | jump to loader()

;CLOSE vec
0812 c3 e0 0c     ; jp 0xce0             |

;CLRDK vec
0815 c3 6b 0d     ; jp 0xd6b             |

;REPORT vec
0818 c3 8e 0d     ; jp 0xd8e             |

;unknown jump vectors
081b c3 ab 0b     ; jp 0xbab             |
081e c3 34 0c     ; jp 0xc34             |
0821 c3 36 09     ; jp 0x936             |
0824 c3 45 09     ; jp 0x945             |
0827 c3 3b 0b     ; jp 0xb3b             |
082a c3 5a 0b     ; jp 0xb5a             |
082d c3 67 0b     ; jp 0xb67             |

;open()
0830 97           ; sub a                |
0831 32 ad 40     ; ld (0x40ad), a       | set Disk # = a
0834 3e 80        ; ld a, 0x80           |
0836 32 13 42     ; ld (0x4213), a       |
0839 e5           ; push hl              |
083a 3a a5 40     ; ld a, (0x40a5)       | get a = AD (access denined)
083d 2f           ; cpl                  | a = bit mask of allowed drives
083e 47           ; ld b, a              |
083f 21 13 42     ; ld hl, 0x4213        |
0842 7e           ; ld a, (hl)           |
0843 07           ; rlca                 | get next potential disk
0844 77           ; ld (hl), a           |
0845 21 ad 40     ; ld hl, 0x40ad        | get disk# from index file
0848 34           ; inc (hl)             |
0849 a0           ; and b                | is disk available?
084a e1           ; pop hl               |
084b 28 2f        ; jr z, 0x87c          |
084d e5           ; push hl              |
084e 11 02 00     ; ld de, 0x2           |
0851 01 9f 40     ; ld bc, 0x409f        | Current record number on index?
0854 cd e1 0f     ; call 0xfe1           | setup FD for INDEX (rpt, #records, record size)
0857 02           ; ld (bc), a           |
0858 0b           ; dec bc               |
0859 02           ; ld (bc), a           |
085a 3e 08        ; ld a, 0x8            |
085c 23           ; inc hl               |
085d 23           ; inc hl               |
085e cd 09 08     ; call 0x809           | call KEY[SEARCH]
0861 e1           ; pop hl               |
0862 20 18        ; jr nz, 0x87c         |
0864 11 18 00     ; ld de, 0x18          |
0867 3e 01        ; ld a, 0x1            |
0869 cd 00 08     ; call 0x800           | call READ
086c 21 ad 40     ; ld hl, 0x40ad        | get disk# from index file
086f 46           ; ld b, (hl)           |
0870 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
0873 11 0f 00     ; ld de, 0xf           |
0876 19           ; add hl, de           |
0877 70           ; ld (hl), b           |
0878 01 df 0d     ; ld bc, 0xddf         |
087b c9           ; ret                  |
087c e5           ; push hl              |
087d 21 13 42     ; ld hl, 0x4213        |
0880 7e           ; ld a, (hl)           |
0881 fe 80        ; cp 0x80              |
0883 fa 3a 08     ; jp m, 0x83a          |
0886 3e 04        ; ld a, 0x4            |
0888 b7           ; or a                 |
0889 e1           ; pop hl               |
088a 01 df 0d     ; ld bc, 0xddf         |
088d c9           ; ret                  |

;read()
088e cd b8 0f     ; call 0xfb8           |
0891 c3 00 10     ; jp 0x1000            |
0894 cd f0 0a     ; call 0xaf0           |
0897 c0           ; ret nz               |
0898 21 9d 40     ; ld hl, 0x409d        |
089b 36 20        ; ld (hl), 0x20        |
089d cd 5a 0b     ; call 0xb5a           |
08a0 cd d3 0a     ; call 0xad3           |
08a3 cd 3b 0b     ; call 0xb3b           |
08a6 1e ff        ; ld e, 0xff           |
08a8 cd 67 0b     ; call 0xb67           |
08ab ca 36 09     ; jp z, 0x936          |
08ae cd 8d 0c     ; call 0xc8d           |
08b1 c2 36 09     ; jp nz, 0x936         |
08b4 3a b8 40     ; ld a, (0x40b8)       | get a = PART2 unused length
08b7 3c           ; inc a                |
08b8 47           ; ld b, a              |
08b9 0e 19        ; ld c, 0x19           |
08bb d9           ; exx                  |
08bc 2a b6 40     ; ld hl, (0x40b6)      | get hl = PART1 (length to be transferred)
08bf 7c           ; ld a, h              |
08c0 1f           ; rra                  |
08c1 7d           ; ld a, l              |
08c2 1f           ; rra                  |
08c3 47           ; ld b, a              |
08c4 21 ee 08     ; ld hl, 0x8ee         |
08c7 30 04        ; jr nc, 0x8cd         |
08c9 21 f4 08     ; ld hl, 0x8f4         |
08cc 04           ; inc b                |
08cd e5           ; push hl              |
08ce 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
08d1 2b           ; dec hl               |
08d2 56           ; ld d, (hl)           |
08d3 db 1a        ; in a, (0x1a)         |
08d5 0e 1a        ; ld c, 0x1a           |
08d7 ed 78        ; in a, (c)            |
08d9 f2 d7 08     ; jp p, 0x8d7          |
08dc 0d           ; dec c                |
08dd db 19        ; in a, (0x19)         | read byte from disk 2
08df fe 9b        ; cp 0x9b              | is Data record?
08e1 c8           ; ret z                |
08e2 e1           ; pop hl               |
08e3 21 9d 40     ; ld hl, 0x409d        |
08e6 3e 02        ; ld a, 0x2            |
08e8 35           ; dec (hl)             |
08e9 28 4b        ; jr z, 0x936          |
08eb 18 b9        ; jr 0x8a6             |
08ed 23           ; inc hl               |
08ee ed 58        ; in e, (c)            | read byte from disk 2
08f0 72           ; ld (hl), d           |
08f1 23           ; inc hl               |
08f2 73           ; ld (hl), e           |
08f3 83           ; add a, e             |
08f4 ed 50        ; in d, (c)            | read byte from disk 2
08f6 82           ; add a, d             |
08f7 05           ; dec b                |
08f8 20 f3        ; jr nz, 0x8ed         |
08fa d9           ; exx                  |
08fb ed 68        ; in l, (c)            |
08fd 85           ; add a, l             |
08fe 05           ; dec b                |
08ff 20 fa        ; jr nz, 0x8fb         |
0901 95           ; sub l                |
0902 bd           ; cp l                 |
0903 db 19        ; in a, (0x19)         | read byte from disk 2
0905 20 dc        ; jr nz, 0x8e3         |
0907 d9           ; exx                  |
0908 23           ; inc hl               |
0909 72           ; ld (hl), d           |
090a fe 10        ; cp 0x10              |
090c 20 d5        ; jr nz, 0x8e3         |
090e 07           ; rlca                 |
090f 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
0912 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
0915 eb           ; ex de, hl            |
0916 2a 20 42     ; ld hl, (0x4220)      |
0919 19           ; add hl, de           |
091a 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
091d d9           ; exx                  |
091e dd 34 00     ; inc (ix + 0x0)       |
0921 20 03        ; jr nz, 0x926         |
0923 dd 34 01     ; inc (ix + 0x1)       |
0926 3e 20        ; ld a, 0x20           |
0928 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
092b 97           ; sub a                |
092c 21 9c 40     ; ld hl, 0x409c        |
092f 1c           ; inc e                |
0930 35           ; dec (hl)             |
0931 c2 a8 08     ; jp nz, 0x8a8         |
0934 18 0f        ; jr 0x945             |
0936 dd 34 00     ; inc (ix + 0x0)       | increment Record Number (LO)
0939 20 03        ; jr nz, 0x93e         |
093b dd 34 01     ; inc (ix + 0x1)       | increment Record Number (HI)
093e 21 9c 40     ; ld hl, 0x409c        |
0941 35           ; dec (hl)             |
0942 20 f2        ; jr nz, 0x936         |
0944 b7           ; or a                 |
0945 fb           ; ei                   |
0946 dd e5        ; push ix              |
0948 c1           ; pop bc               |
0949 c9           ; ret                  |

;write jump()
094a cd b8 0f     ; call 0xfb8           |
094d c3 03 10     ; jp 0x1003            |
0950 cd f0 0a     ; call 0xaf0           |
0953 c0           ; ret nz               |
0954 cd 5a 0b     ; call 0xb5a           |
0957 cd d3 0a     ; call 0xad3           |
095a dd 5e 0e     ; ld e, (ix + 0xe)     |
095d 16 00        ; ld d, 0x0            |
095f dd 7e 10     ; ld a, (ix + 0x10)    |
0962 dd 96 12     ; sub (ix + 0x12)      |
0965 21 00 00     ; ld hl, 0x0           |
0968 3d           ; dec a                |
0969 19           ; add hl, de           |
096a 3c           ; inc a                |
096b 20 fc        ; jr nz, 0x969         |
096d dd 75 0a     ; ld (ix + 0xa), l     |
0970 dd 74 0b     ; ld (ix + 0xb), h     |
0973 18 0d        ; jr 0x982             |

;rewrite()
0975 cd b8 0f     ; call 0xfb8           |
0978 c3 06 10     ; jp 0x1006            |
097b cd f0 0a     ; call 0xaf0           |
097e c0           ; ret nz               |
097f cd d3 0a     ; call 0xad3           |
0982 21 9d 40     ; ld hl, 0x409d        |
0985 36 20        ; ld (hl), 0x20        |
0987 dd 7e 13     ; ld a, (ix + 0x13)    |
098a b7           ; or a                 |
098b 3e 07        ; ld a, 0x7            |
098d fa 36 09     ; jp m, 0x936          |
0990 21 29 42     ; ld hl, 0x4229        |
0993 77           ; ld (hl), a           |
0994 21 22 42     ; ld hl, 0x4222        |
0997 36 00        ; ld (hl), 0x0         |
0999 22 24 42     ; ld (0x4224), hl      |
099c cd 3b 0b     ; call 0xb3b           |
099f 1e ff        ; ld e, 0xff           |
09a1 cd 67 0b     ; call 0xb67           |
09a4 28 57        ; jr z, 0x9fd          |
09a6 cd 8d 0c     ; call 0xc8d           |
09a9 20 8b        ; jr nz, 0x936         |
09ab db 19        ; in a, (0x19)         |
09ad 3e 80        ; ld a, 0x80           |
09af d3 1b        ; out (0x1b), a        |
09b1 d9           ; exx                  |
09b2 2a b6 40     ; ld hl, (0x40b6)      | get hl = PART1 (length to be transferred)
09b5 db 19        ; in a, (0x19)         |
09b7 eb           ; ex de, hl            |
09b8 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
09bb db 19        ; in a, (0x19)         |
09bd 1b           ; dec de               |
09be 7a           ; ld a, d              |
09bf 13           ; inc de               |
09c0 0f           ; rrca                 |
09c1 db 19        ; in a, (0x19)         |
09c3 3a b8 40     ; ld a, (0x40b8)       | get a = PART2 unused length
09c6 57           ; ld d, a              |
09c7 db 19        ; in a, (0x19)         |
09c9 14           ; inc d                |
09ca 01 19 00     ; ld bc, 0x19          |
09cd db 19        ; in a, (0x19)         |
09cf 3e 9b        ; ld a, 0x9b           |
09d1 d3 19        ; out (0x19), a        |
09d3 d2 c8 0a     ; jp nc, 0xac8         |
09d6 86           ; add a, (hl)          |
09d7 ed a3        ; outi                 |
09d9 20 fb        ; jr nz, 0x9d6         |
09db 43           ; ld b, e              |
09dc 86           ; add a, (hl)          |
09dd ed a3        ; outi                 |
09df 20 fb        ; jr nz, 0x9dc         |
09e1 15           ; dec d                |
09e2 28 05        ; jr z, 0x9e9          |
09e4 ed 41        ; out (c), b           |
09e6 15           ; dec d                |
09e7 20 fb        ; jr nz, 0x9e4         |
09e9 d3 19        ; out (0x19), a        |
09eb 2a 24 42     ; ld hl, (0x4224)      |
09ee 16 10        ; ld d, 0x10           |
09f0 ed 51        ; out (c), d           |
09f2 86           ; add a, (hl)          |
09f3 77           ; ld (hl), a           |
09f4 af           ; xor a                |
09f5 d3 19        ; out (0x19), a        |
09f7 00           ; nop                  |
09f8 00           ; nop                  |
09f9 d3 19        ; out (0x19), a        |
09fb d3 1b        ; out (0x1b), a        |
09fd 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
0a00 eb           ; ex de, hl            |
0a01 2a 20 42     ; ld hl, (0x4220)      |
0a04 19           ; add hl, de           |
0a05 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
0a08 d9           ; exx                  |
0a09 1c           ; inc e                |
0a0a dd 34 00     ; inc (ix + 0x0)       |
0a0d 20 03        ; jr nz, 0xa12         |
0a0f dd 34 01     ; inc (ix + 0x1)       |
0a12 21 9b 40     ; ld hl, 0x409b        |
0a15 35           ; dec (hl)             |
0a16 20 89        ; jr nz, 0x9a1         |
0a18 23           ; inc hl               |
0a19 7e           ; ld a, (hl)           |
0a1a ed 44        ; neg                  |
0a1c dd 86 00     ; add a, (ix + 0x0)    |
0a1f dd 77 00     ; ld (ix + 0x0), a     |
0a22 38 03        ; jr c, 0xa27          |
0a24 dd 35 01     ; dec (ix + 0x1)       |
0a27 1e ff        ; ld e, 0xff           |
0a29 3e 23        ; ld a, 0x23           |
0a2b 32 24 42     ; ld (0x4224), a       |
0a2e cd 67 0b     ; call 0xb67           |
0a31 ca 36 09     ; jp z, 0x936          |
0a34 cd 8d 0c     ; call 0xc8d           |
0a37 c2 36 09     ; jp nz, 0x936         |
0a3a db 19        ; in a, (0x19)         |
0a3c dd 6e 0c     ; ld l, (ix + 0xc)     |
0a3f dd 66 0d     ; ld h, (ix + 0xd)     |
0a42 2c           ; inc l                |
0a43 25           ; dec h                |
0a44 28 03        ; jr z, 0xa49          |
0a46 2d           ; dec l                |
0a47 26 01        ; ld h, 0x1            |
0a49 01 19 00     ; ld bc, 0x19          |
0a4c db 1a        ; in a, (0x1a)         |
0a4e db 1a        ; in a, (0x1a)         |
0a50 b7           ; or a                 |
0a51 f2 4e 0a     ; jp p, 0xa4e          |
0a54 db 19        ; in a, (0x19)         |
0a56 80           ; add a, b             |
0a57 ed 40        ; in b, (c)            |
0a59 2d           ; dec l                |
0a5a 20 fa        ; jr nz, 0xa56         |
0a5c 80           ; add a, b             |
0a5d ed 40        ; in b, (c)            |
0a5f 25           ; dec h                |
0a60 20 fa        ; jr nz, 0xa5c         |
0a62 b8           ; cp b                 |
0a63 db 19        ; in a, (0x19)         |
0a65 20 49        ; jr nz, 0xab0         |
0a67 fe 10        ; cp 0x10              |
0a69 20 45        ; jr nz, 0xab0         |
0a6b 3a 22 42     ; ld a, (0x4222)       |
0a6e 90           ; sub b                |
0a6f 32 22 42     ; ld (0x4222), a       |
0a72 21 9d 40     ; ld hl, 0x409d        |
0a75 36 14        ; ld (hl), 0x14        |
0a77 2a 20 42     ; ld hl, (0x4220)      |
0a7a 44           ; ld b, h              |
0a7b 4d           ; ld c, l              |
0a7c 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
0a7f 09           ; add hl, bc           |
0a80 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
0a83 1c           ; inc e                |
0a84 dd 34 00     ; inc (ix + 0x0)       |
0a87 20 03        ; jr nz, 0xa8c         |
0a89 dd 34 01     ; inc (ix + 0x1)       |
0a8c 21 9c 40     ; ld hl, 0x409c        |
0a8f 35           ; dec (hl)             |
0a90 20 9c        ; jr nz, 0xa2e         |
0a92 3a 22 42     ; ld a, (0x4222)       |
0a95 b7           ; or a                 |
0a96 ca 45 09     ; jp z, 0x945          |
0a99 21 29 42     ; ld hl, 0x4229        |
0a9c 35           ; dec (hl)             |
0a9d 3e 03        ; ld a, 0x3            |
0a9f 28 15        ; jr z, 0xab6          |
0aa1 2a 26 42     ; ld hl, (0x4226)      |
0aa4 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
0aa7 3a 28 42     ; ld a, (0x4228)       |
0aaa 32 9c 40     ; ld (0x409c), a       | set SNRT  (# recs to be transfd) = a
0aad c3 94 09     ; jp 0x994             |
0ab0 3e 03        ; ld a, 0x3            |
0ab2 21 9d 40     ; ld hl, 0x409d        |
0ab5 35           ; dec (hl)             |
0ab6 ca 36 09     ; jp z, 0x936          |
0ab9 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
0abc 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
0abf 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
0ac2 32 9b 40     ; ld (0x409b), a       | set NRT   (disk record count) = a
0ac5 c3 9f 09     ; jp 0x99f             |
0ac8 86           ; add a, (hl)          |
0ac9 ed a3        ; outi                 |
0acb 43           ; ld b, e              |
0acc 05           ; dec b                |
0acd 86           ; add a, (hl)          |
0ace ed a3        ; outi                 |
0ad0 c3 dc 09     ; jp 0x9dc             |
0ad3 dd 4e 0c     ; ld c, (ix + 0xc)     |
0ad6 dd 46 0d     ; ld b, (ix + 0xd)     |
0ad9 7b           ; ld a, e              |
0ada 2f           ; cpl                  |
0adb 6f           ; ld l, a              |
0adc 7a           ; ld a, d              |
0add 2f           ; cpl                  |
0ade 67           ; ld h, a              |
0adf 09           ; add hl, bc           |
0ae0 23           ; inc hl               |
0ae1 38 05        ; jr c, 0xae8          |
0ae3 50           ; ld d, b              |
0ae4 59           ; ld e, c              |
0ae5 21 00 00     ; ld hl, 0x0           |
0ae8 22 b8 40     ; ld (0x40b8), hl      | set PART2 unused length = hl
0aeb eb           ; ex de, hl            |
0aec 22 b6 40     ; ld (0x40b6), hl      | set PART1 (length to be transferred) = hl
0aef c9           ; ret                  |
0af0 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
0af3 32 9c 40     ; ld (0x409c), a       | set SNRT  (# recs to be transfd) = a
0af6 6b           ; ld l, e              |
0af7 62           ; ld h, d              |
0af8 22 20 42     ; ld (0x4220), hl      |
0afb dd 6e 0f     ; ld l, (ix + 0xf)     |
0afe 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
0b01 bd           ; cp l                 |
0b02 28 28        ; jr z, 0xb2c          |
0b04 3e 80        ; ld a, 0x80           |
0b06 65           ; ld h, l              |
0b07 07           ; rlca                 |
0b08 2d           ; dec l                |
0b09 20 fc        ; jr nz, 0xb07         |
0b0b 6c           ; ld l, h              |
0b0c 67           ; ld h, a              |
0b0d d3 1a        ; out (0x1a), a        |
0b0f 97           ; sub a                |
0b10 d3 0a        ; out (0xa), a         |
0b12 db 1a        ; in a, (0x1a)         |
0b14 0f           ; rrca                 |
0b15 38 e4        ; jr c, 0xafb          |
0b17 7c           ; ld a, h              |
0b18 d3 1a        ; out (0x1a), a        |
0b1a 7d           ; ld a, l              |
0b1b 32 a0 40     ; ld (0x40a0), a       | set DISK  (selected disk drive #) = a
0b1e 3e ff        ; ld a, 0xff           |
0b20 32 a1 40     ; ld (0x40a1), a       | set TRKS  (track # for drive 1) = a
0b23 2e 94        ; ld l, 0x94           |
0b25 06 05        ; ld b, 0x5            |
0b27 cd 2c 0c     ; call 0xc2c           |
0b2a 10 fb        ; djnz 0xb27           |
0b2c db 1a        ; in a, (0x1a)         |
0b2e e6 40        ; and 0x40             |
0b30 28 02        ; jr z, 0xb34          |
0b32 97           ; sub a                |
0b33 c9           ; ret                  |
0b34 3e 05        ; ld a, 0x5            |
0b36 dd e5        ; push ix              |
0b38 c1           ; pop bc               |
0b39 b7           ; or a                 |
0b3a c9           ; ret                  |

;UNEXPLORED
0b3b dd 7e 16     ; ld a, (ix + 0x16)    |
0b3e dd 77 00     ; ld (ix + 0x0), a     |
0b41 dd 7e 17     ; ld a, (ix + 0x17)    |
0b44 dd 77 01     ; ld (ix + 0x1), a     |
0b47 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
0b4a 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
0b4d 22 26 42     ; ld (0x4226), hl      |
0b50 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
0b53 32 9b 40     ; ld (0x409b), a       | set NRT   (disk record count) = a
0b56 32 28 42     ; ld (0x4228), a       |
0b59 c9           ; ret                  |
0b5a dd 7e 00     ; ld a, (ix + 0x0)     |
0b5d dd 77 16     ; ld (ix + 0x16), a    |
0b60 dd 7e 01     ; ld a, (ix + 0x1)     |
0b63 dd 77 17     ; ld (ix + 0x17), a    |
0b66 c9           ; ret                  |
0b67 dd 7e 01     ; ld a, (ix + 0x1)     |
0b6a dd be 0b     ; cp (ix + 0xb)        |
0b6d 20 06        ; jr nz, 0xb75         |
0b6f dd 7e 00     ; ld a, (ix + 0x0)     |
0b72 dd be 0a     ; cp (ix + 0xa)        |
0b75 d8           ; ret c                |
0b76 97           ; sub a                |
0b77 3e 06        ; ld a, 0x6            |
0b79 c9           ; ret                  |
0b7a 0e 1a        ; ld c, 0x1a           |
0b7c 21 10 27     ; ld hl, 0x2710        |
0b7f f3           ; di                   |
0b80 ed 78        ; in a, (c)            |
0b82 ed 78        ; in a, (c)            |
0b84 fa 95 0b     ; jp m, 0xb95          |
0b87 2d           ; dec l                |
0b88 20 f8        ; jr nz, 0xb82         |
0b8a ed 78        ; in a, (c)            |
0b8c fa 95 0b     ; jp m, 0xb95          |
0b8f 25           ; dec h                |
0b90 20 f0        ; jr nz, 0xb82         |
0b92 fb           ; ei                   |
0b93 3c           ; inc a                |
0b94 c9           ; ret                  |
0b95 db 19        ; in a, (0x19)         |
0b97 fe 9e        ; cp 0x9e              |
0b99 20 e5        ; jr nz, 0xb80         |
0b9b 0d           ; dec c                |
0b9c ed 40        ; in b, (c)            |
0b9e ed 48        ; in c, (c)            |
0ba0 db 19        ; in a, (0x19)         |
0ba2 90           ; sub b                |
0ba3 91           ; sub c                |
0ba4 20 da        ; jr nz, 0xb80         |
0ba6 fb           ; ei                   |
0ba7 21 a1 40     ; ld hl, 0x40a1        |
0baa 70           ; ld (hl), b           |
0bab 21 a1 40     ; ld hl, 0x40a1        |
0bae 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
0bb1 3c           ; inc a                |
0bb2 e6 fe        ; and 0xfe             |
0bb4 fe 06        ; cp 0x6               |
0bb6 28 0b        ; jr z, 0xbc3          |
0bb8 3a 1b 10     ; ld a, (0x101b)       |
0bbb fe c3        ; cp 0xc3              |
0bbd ca 1b 10     ; jp z, 0x101b         |
0bc0 c3 00 00     ; jp 0x0               |
0bc3 7e           ; ld a, (hl)           |
0bc4 72           ; ld (hl), d           |
0bc5 fe fe        ; cp 0xfe              |
0bc7 d0           ; ret nc               |
0bc8 47           ; ld b, a              |
0bc9 21 00 4d     ; ld hl, 0x4d00        |
0bcc bc           ; cp h                 |
0bcd 38 06        ; jr c, 0xbd5          |
0bcf ed 44        ; neg                  |
0bd1 c6 99        ; add a, 0x99          |
0bd3 47           ; ld b, a              |
0bd4 2c           ; inc l                |
0bd5 7a           ; ld a, d              |
0bd6 bc           ; cp h                 |
0bd7 38 07        ; jr c, 0xbe0          |
0bd9 ed 44        ; neg                  |
0bdb c6 99        ; add a, 0x99          |
0bdd 57           ; ld d, a              |
0bde cb fd        ; set 0x7, l           |
0be0 7d           ; ld a, l              |
0be1 b7           ; or a                 |
0be2 28 18        ; jr z, 0xbfc          |
0be4 fe 81        ; cp 0x81              |
0be6 28 14        ; jr z, 0xbfc          |
0be8 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
0beb 67           ; ld h, a              |
0bec 3e 80        ; ld a, 0x80           |
0bee 07           ; rlca                 |
0bef 25           ; dec h                |
0bf0 20 fc        ; jr nz, 0xbee         |
0bf2 cb 85        ; res 0x0, l           |
0bf4 b5           ; or l                 |
0bf5 d3 1a        ; out (0x1a), a        |
0bf7 2e 02        ; ld l, 0x2            |
0bf9 cd 2c 0c     ; call 0xc2c           |
0bfc 78           ; ld a, b              |
0bfd 92           ; sub d                |
0bfe 47           ; ld b, a              |
0bff c8           ; ret z                |
0c00 0e 00        ; ld c, 0x0            |
0c02 30 05        ; jr nc, 0xc09         |
0c04 0e 40        ; ld c, 0x40           |
0c06 ed 44        ; neg                  |
0c08 47           ; ld b, a              |
0c09 79           ; ld a, c              |
0c0a b7           ; or a                 |
0c0b 20 09        ; jr nz, 0xc16         |
0c0d db 1a        ; in a, (0x1a)         |
0c0f e6 10        ; and 0x10             |
0c11 28 03        ; jr z, 0xc16          |
0c13 01 40 03     ; ld bc, 0x340         |
0c16 3e 20        ; ld a, 0x20           |
0c18 b1           ; or c                 |
0c19 d3 1b        ; out (0x1b), a        |
0c1b 79           ; ld a, c              |
0c1c d3 1b        ; out (0x1b), a        |
0c1e 2e d5        ; ld l, 0xd5           |
0c20 cd 2c 0c     ; call 0xc2c           |
0c23 cd 2c 0c     ; call 0xc2c           |
0c26 05           ; dec b                |
0c27 20 e0        ; jr nz, 0xc09         |
0c29 2e 9d        ; ld l, 0x9d           |
0c2b 04           ; inc b                |
0c2c db 19        ; in a, (0x19)         |
0c2e 2d           ; dec l                |
0c2f db 19        ; in a, (0x19)         |
0c31 c8           ; ret z                |
0c32 18 f8        ; jr 0xc2c             |
0c34 21 9d 40     ; ld hl, 0x409d        |
0c37 36 0a        ; ld (hl), 0xa         |
0c39 fb           ; ei                   |
0c3a dd 6e 00     ; ld l, (ix + 0x0)     |
0c3d dd 66 01     ; ld h, (ix + 0x1)     |
0c40 dd 7e 0e     ; ld a, (ix + 0xe)     |
0c43 dd 46 10     ; ld b, (ix + 0x10)    |
0c46 05           ; dec b                |
0c47 2f           ; cpl                  |
0c48 3c           ; inc a                |
0c49 5f           ; ld e, a              |
0c4a 16 ff        ; ld d, 0xff           |
0c4c 78           ; ld a, b              |
0c4d 19           ; add hl, de           |
0c4e 3c           ; inc a                |
0c4f 38 fc        ; jr c, 0xc4d          |
0c51 57           ; ld d, a              |
0c52 7d           ; ld a, l              |
0c53 93           ; sub e                |
0c54 5f           ; ld e, a              |
0c55 cd 7a 0b     ; call 0xb7a           |
0c58 21 a1 40     ; ld hl, 0x40a1        |
0c5b 56           ; ld d, (hl)           |
0c5c 28 2f        ; jr z, 0xc8d          |
0c5e 2e 9d        ; ld l, 0x9d           |
0c60 cd 2c 0c     ; call 0xc2c           |
0c63 21 00 80     ; ld hl, 0x8000        |
0c66 0e 1a        ; ld c, 0x1a           |
0c68 2d           ; dec l                |
0c69 28 0b        ; jr z, 0xc76          |
0c6b ed 40        ; in b, (c)            |
0c6d f2 68 0c     ; jp p, 0xc68          |
0c70 db 19        ; in a, (0x19)         |
0c72 d6 9b        ; sub 0x9b             |
0c74 28 17        ; jr z, 0xc8d          |
0c76 25           ; dec h                |
0c77 20 ef        ; jr nz, 0xc68         |
0c79 21 9d 40     ; ld hl, 0x409d        |
0c7c 35           ; dec (hl)             |
0c7d 01 00 01     ; ld bc, 0x100         |
0c80 28 3a        ; jr z, 0xcbc          |
0c82 db 1a        ; in a, (0x1a)         |
0c84 e6 10        ; and 0x10             |
0c86 20 34        ; jr nz, 0xcbc         |
0c88 cd 09 0c     ; call 0xc09           |
0c8b 18 d1        ; jr 0xc5e             |
0c8d 7b           ; ld a, e              |
0c8e dd 6e 0e     ; ld l, (ix + 0xe)     |
0c91 bd           ; cp l                 |
0c92 30 a5        ; jr nc, 0xc39         |
0c94 21 00 08     ; ld hl, 0x800         |
0c97 0e 1a        ; ld c, 0x1a           |
0c99 f3           ; di                   |
0c9a db 1a        ; in a, (0x1a)         |
0c9c ed 78        ; in a, (c)            |
0c9e f2 9c 0c     ; jp p, 0xc9c          |
0ca1 db 19        ; in a, (0x19)         |
0ca3 fe 9e        ; cp 0x9e              |
0ca5 20 0f        ; jr nz, 0xcb6         |
0ca7 db 19        ; in a, (0x19)         |
0ca9 ba           ; cp d                 |
0caa 20 14        ; jr nz, 0xcc0         |
0cac db 19        ; in a, (0x19)         |
0cae bb           ; cp e                 |
0caf 20 05        ; jr nz, 0xcb6         |
0cb1 db 19        ; in a, (0x19)         |
0cb3 93           ; sub e                |
0cb4 92           ; sub d                |
0cb5 c8           ; ret z                |
0cb6 fb           ; ei                   |
0cb7 2b           ; dec hl               |
0cb8 7d           ; ld a, l              |
0cb9 b4           ; or h                 |
0cba 20 dd        ; jr nz, 0xc99         |
0cbc 3e 01        ; ld a, 0x1            |
0cbe b7           ; or a                 |
0cbf c9           ; ret                  |
0cc0 4f           ; ld c, a              |
0cc1 db 19        ; in a, (0x19)         |
0cc3 47           ; ld b, a              |
0cc4 db 19        ; in a, (0x19)         |
0cc6 91           ; sub c                |
0cc7 90           ; sub b                |
0cc8 41           ; ld b, c              |
0cc9 0e 1a        ; ld c, 0x1a           |
0ccb 20 cc        ; jr nz, 0xc99         |
0ccd db 19        ; in a, (0x19)         |
0ccf fe 10        ; cp 0x10              |
0cd1 20 c6        ; jr nz, 0xc99         |
0cd3 78           ; ld a, b              |
0cd4 32 a1 40     ; ld (0x40a1), a       | set TRKS  (track # for drive 1) = a
0cd7 21 9d 40     ; ld hl, 0x409d        |
0cda 35           ; dec (hl)             |
0cdb 28 df        ; jr z, 0xcbc          |
0cdd c3 39 0c     ; jp 0xc39             |
0ce0 01 0a 00     ; ld bc, 0xa           |
0ce3 54           ; ld d, h              |
0ce4 5d           ; ld e, l              |
0ce5 09           ; add hl, bc           |
0ce6 eb           ; ex de, hl            |
0ce7 7e           ; ld a, (hl)           |
0ce8 36 00        ; ld (hl), 0x0         |
0cea 12           ; ld (de), a           |
0ceb 23           ; inc hl               |
0cec 13           ; inc de               |
0ced 7e           ; ld a, (hl)           |
0cee 36 00        ; ld (hl), 0x0         |
0cf0 12           ; ld (de), a           |
0cf1 13           ; inc de               |
0cf2 13           ; inc de               |
0cf3 13           ; inc de               |
0cf4 13           ; inc de               |
0cf5 1a           ; ld a, (de)           |
0cf6 32 ad 40     ; ld (0x40ad), a       | set Disk # = a
0cf9 cd e1 0f     ; call 0xfe1           |
0cfc 12           ; ld (de), a           |
0cfd 11 02 00     ; ld de, 0x2           |
0d00 01 9e 40     ; ld bc, 0x409e        |
0d03 02           ; ld (bc), a           |
0d04 03           ; inc bc               |
0d05 02           ; ld (bc), a           |
0d06 0b           ; dec bc               |
0d07 3e 08        ; ld a, 0x8            |
0d09 e5           ; push hl              |
0d0a 23           ; inc hl               |
0d0b cd 09 08     ; call 0x809           |
0d0e e1           ; pop hl               |
0d0f 20 09        ; jr nz, 0xd1a         |
0d11 2b           ; dec hl               |
0d12 3e 01        ; ld a, 0x1            |
0d14 11 14 00     ; ld de, 0x14          |
0d17 cc 03 08     ; call z, 0x803        |
0d1a 01 df 0d     ; ld bc, 0xddf         |
0d1d c9           ; ret                  |

;loader()
0d1e 21 d0 40     ; ld hl, 0x40d0        | loader() - hl = FD for loaded file
0d21 cd 30 08     ; call 0x830           | call OPEN
0d24 c0           ; ret nz               |
0d25 3a da 40     ; ld a, (0x40da)       | get a = Number of Records (LFILE)
0d28 4f           ; ld c, a              |
0d29 06 01        ; ld b, 0x1            |
0d2b 78           ; ld a, b              |
0d2c b9           ; cp c                 |
0d2d 30 34        ; jr nc, 0xd63         |
0d2f 21 d0 40     ; ld hl, 0x40d0        | hl = Record #
0d32 70           ; ld (hl), b           |
0d33 04           ; inc b                |
0d34 04           ; inc b                |
0d35 11 ff 00     ; ld de, 0xff          |
0d38 c5           ; push bc              |
0d39 01 d0 40     ; ld bc, 0x40d0        |
0d3c 21 00 42     ; ld hl, 0x4200        |
0d3f 3e 01        ; ld a, 0x1            | Read 1 record
0d41 cd 00 08     ; call 0x800           | call READ
0d44 e1           ; pop hl               |
0d45 c0           ; ret nz               |
0d46 e5           ; push hl              |
0d47 21 ff 42     ; ld hl, 0x42ff        |
0d4a 77           ; ld (hl), a           |
0d4b 2c           ; inc l                |
0d4c c1           ; pop bc               |
0d4d 7e           ; ld a, (hl)           |
0d4e b7           ; or a                 |
0d4f 28 da        ; jr z, 0xd2b          |
0d51 c5           ; push bc              |
0d52 23           ; inc hl               |
0d53 5e           ; ld e, (hl)           |
0d54 23           ; inc hl               |
0d55 56           ; ld d, (hl)           |
0d56 23           ; inc hl               |
0d57 4e           ; ld c, (hl)           |
0d58 0c           ; inc c                |
0d59 0d           ; dec c                |
0d5a 23           ; inc hl               |
0d5b 28 ef        ; jr z, 0xd4c          |
0d5d 06 00        ; ld b, 0x0            |
0d5f ed b0        ; ldir                 |
0d61 18 e9        ; jr 0xd4c             |
0d63 3e 01        ; ld a, 0x1            |
0d65 a0           ; and b                |
0d66 c8           ; ret z                |
0d67 06 00        ; ld b, 0x0            |
0d69 18 c0        ; jr 0xd2b             |

;clrdk()
0d6b 21 8b 0d     ; ld hl, 0xd8b         |
0d6e 11 fa 13     ; ld de, 0x13fa        |
0d71 06 03        ; ld b, 0x3            |
0d73 1a           ; ld a, (de)           |
0d74 be           ; cp (hl)              | check if "IWS" version
0d75 20 07        ; jr nz, 0xd7e         |
0d77 23           ; inc hl               |
0d78 13           ; inc de               |
0d79 10 f8        ; djnz 0xd73           |
0d7b cd 15 10     ; call 0x1015          | call IWS specific code

;deselect all disks()
0d7e 97           ; sub a                |
0d7f 32 a0 40     ; ld (0x40a0), a       | set DISK  (selected disk drive #) = a
0d82 d3 1b        ; out (0x1b), a        |
0d84 d3 0b        ; out (0xb), a         |
0d86 d3 1a        ; out (0x1a), a        |
0d88 d3 0a        ; out (0xa), a         |
0d8a c9           ; ret                  |

;text string? - IWS
0d8b 49           ; ld c, c              |
0d8c 57           ; ld d, a              |
0d8d 53           ; ld d, e              |

;report()
0d8e c5           ; push bc              |
0d8f f5           ; push af              |
0d90 cd 6b 0d     ; call 0xd6b           | clrdk()
0d93 21 ec 0d     ; ld hl, 0xdec         |
0d96 0e 01        ; ld c, 0x1            |
0d98 cd 27 00     ; call 0x27            | print "CR?"
0d9b f1           ; pop af               |
0d9c fe 04        ; cp 0x4               | 0x4 = Key not found
0d9e 28 33        ; jr z, 0xdd3          |
0da0 fe 09        ; cp 0x9               |
0da2 fa a7 0d     ; jp m, 0xda7          |
0da5 3e 09        ; ld a, 0x9            |

;print nth error message
0da7 21 ed 0d     ; ld hl, 0xded         | Start of error messages
0daa 4e           ; ld c, (hl)           |
0dab cb 79        ; bit 0x7, c           | Message separators have Bit 7 set
0dad 23           ; inc hl               |
0dae 28 fa        ; jr z, 0xdaa          |
0db0 3d           ; dec a                |
0db1 20 f7        ; jr nz, 0xdaa         |
0db3 cb b9        ; res 0x7, c           |
0db5 cd 27 00     ; call 0x27            | print:  "NOT FOUND"
0db8 0e 04        ; ld c, 0x4            |
0dba 21 e8 0d     ; ld hl, 0xde8         | string: " ON "
0dbd cd 27 00     ; call 0x27            | print:  " ON"
0dc0 0e 08        ; ld c, 0x8            |
0dc2 e1           ; pop hl               |
0dc3 23           ; inc hl               |
0dc4 23           ; inc hl               |
0dc5 cd 27 00     ; call 0x27            | print:  "INDEX"
0dc8 cd 30 00     ; call 0x30            | STOP
0dcb 0e 01        ; ld c, 0x1            |
0dcd 21 ec 0d     ; ld hl, 0xdec         |
0dd0 c3 27 00     ; jp 0x27              |
0dd3 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
0dd6 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
0dd9 4f           ; ld c, a              |
0dda cd 27 00     ; call 0x27            |
0ddd 3e 04        ; ld a, 0x4            | A=4 - fourth err msg: "NOT FOUND"
0ddf 18 c6        ; jr 0xda7             |

;text strings - INDEX .. WEIRD ERR
0de1 49           ; ld c, c              |
0de2 4e           ; ld c, (hl)           |
0de3 44           ; ld b, h              |
0de4 45           ; ld b, l              |
0de5 58           ; ld e, b              |
0de6 20 20        ; jr nz, 0xe08         |
0de8 20 4f        ; jr nz, 0xe39         |
0dea 4e           ; ld c, (hl)           |
0deb 20 0d        ; jr nz, 0xdfa         |
0ded 8a           ; adc a, d             |
0dee 46           ; ld b, (hl)           |
0def 4f           ; ld c, a              |
0df0 52           ; ld d, d              |
0df1 4d           ; ld c, l              |
0df2 41           ; ld b, c              |
0df3 54           ; ld d, h              |
0df4 20 45        ; jr nz, 0xe3b         |
0df6 52           ; ld d, d              |
0df7 52           ; ld d, d              |
0df8 88           ; adc a, b             |
0df9 52           ; ld d, d              |
0dfa 45           ; ld b, l              |
0dfb 41           ; ld b, c              |
0dfc 44           ; ld b, h              |
0dfd 20 45        ; jr nz, 0xe44         |
0dff 52           ; ld d, d              |
0e00 52           ; ld d, d              |
0e01 89           ; adc a, c             |
0e02 57           ; ld d, a              |
0e03 52           ; ld d, d              |
0e04 49           ; ld c, c              |
0e05 54           ; ld d, h              |
0e06 45           ; ld b, l              |
0e07 20 45        ; jr nz, 0xe4e         |
0e09 52           ; ld d, d              |
0e0a 52           ; ld d, d              |
0e0b 8a           ; adc a, d             |
0e0c 20 4e        ; jr nz, 0xe5c         |
0e0e 4f           ; ld c, a              |
0e0f 54           ; ld d, h              |
0e10 20 46        ; jr nz, 0xe58         |
0e12 4f           ; ld c, a              |
0e13 55           ; ld d, l              |
0e14 4e           ; ld c, (hl)           |
0e15 44           ; ld b, h              |
0e16 87           ; add a, a             |
0e17 4e           ; ld c, (hl)           |
0e18 4f           ; ld c, a              |
0e19 20 44        ; jr nz, 0xe5f         |
0e1b 49           ; ld c, c              |
0e1c 53           ; ld d, e              |
0e1d 4b           ; ld c, e              |
0e1e 8a           ; adc a, d             |
0e1f 50           ; ld d, b              |
0e20 41           ; ld b, c              |
0e21 53           ; ld d, e              |
0e22 53           ; ld d, e              |
0e23 45           ; ld b, l              |
0e24 44           ; ld b, h              |
0e25 20 45        ; jr nz, 0xe6c         |
0e27 4f           ; ld c, a              |
0e28 46           ; ld b, (hl)           |
0e29 8d           ; adc a, l             |
0e2a 57           ; ld d, a              |
0e2b 52           ; ld d, d              |
0e2c 49           ; ld c, c              |
0e2d 54           ; ld d, h              |
0e2e 45           ; ld b, l              |
0e2f 20 50        ; jr nz, 0xe81         |
0e31 52           ; ld d, d              |
0e32 4f           ; ld c, a              |
0e33 54           ; ld d, h              |
0e34 45           ; ld b, l              |
0e35 43           ; ld b, e              |
0e36 54           ; ld d, h              |
0e37 8d           ; adc a, l             |
0e38 44           ; ld b, h              |
0e39 41           ; ld b, c              |
0e3a 54           ; ld d, h              |
0e3b 41           ; ld b, c              |
0e3c 20 4c        ; jr nz, 0xe8a         |
0e3e 49           ; ld c, c              |
0e3f 4e           ; ld c, (hl)           |
0e40 4b           ; ld c, e              |
0e41 20 45        ; jr nz, 0xe88         |
0e43 52           ; ld d, d              |
0e44 52           ; ld d, d              |
0e45 89           ; adc a, c             |
0e46 57           ; ld d, a              |
0e47 45           ; ld b, l              |
0e48 49           ; ld c, c              |
0e49 52           ; ld d, d              |
0e4a 44           ; ld b, h              |
0e4b 20 45        ; jr nz, 0xe92         |
0e4d 52           ; ld d, d              |
0e4e 52           ; ld d, d              |

;key search()
0e4f cd b8 0f     ; call 0xfb8           |
0e52 c3 09 10     ; jp 0x1009            |
0e55 e5           ; push hl              |
0e56 d5           ; push de              |
0e57 cd f0 0a     ; call 0xaf0           |
0e5a d1           ; pop de               |
0e5b e1           ; pop hl               |
0e5c c0           ; ret nz               |
0e5d 22 4a 42     ; ld (0x424a), hl      |
0e60 dd 7e 0a     ; ld a, (ix + 0xa)     |
0e63 dd b6 0b     ; or (ix + 0xb)        |
0e66 ca 98 0f     ; jp z, 0xf98          |
0e69 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
0e6c b7           ; or a                 |
0e6d 28 f7        ; jr z, 0xe66          |
0e6f 4f           ; ld c, a              |
0e70 06 00        ; ld b, 0x0            |
0e72 09           ; add hl, bc           |
0e73 22 20 42     ; ld (0x4220), hl      |
0e76 47           ; ld b, a              |
0e77 3e 9b        ; ld a, 0x9b           |
0e79 2b           ; dec hl               |
0e7a 86           ; add a, (hl)          |
0e7b 10 fc        ; djnz 0xe79           |
0e7d 08           ; ex af, af'           |
0e7e c5           ; push bc              |
0e7f e1           ; pop hl               |
0e80 19           ; add hl, de           |
0e81 dd 7e 0c     ; ld a, (ix + 0xc)     |
0e84 95           ; sub l                |
0e85 6f           ; ld l, a              |
0e86 dd 7e 0d     ; ld a, (ix + 0xd)     |
0e89 9c           ; sbc a, h             |
0e8a da 98 0f     ; jp c, 0xf98          |
0e8d 08           ; ex af, af'           |
0e8e 67           ; ld h, a              |
0e8f 22 50 42     ; ld (0x4250), hl      |
0e92 08           ; ex af, af'           |
0e93 67           ; ld h, a              |
0e94 b5           ; or l                 |
0e95 2b           ; dec hl               |
0e96 7c           ; ld a, h              |
0e97 21 5b 0f     ; ld hl, 0xf5b         |
0e9a 28 09        ; jr z, 0xea5          |
0e9c b7           ; or a                 |
0e9d 21 55 0f     ; ld hl, 0xf55         |
0ea0 28 03        ; jr z, 0xea5          |
0ea2 21 50 0f     ; ld hl, 0xf50         |
0ea5 e5           ; push hl              |
0ea6 fd e1        ; pop iy               |
0ea8 63           ; ld h, e              |
0ea9 2e 1a        ; ld l, 0x1a           |
0eab 22 52 42     ; ld (0x4252), hl      |
0eae 61           ; ld h, c              |
0eaf 2d           ; dec l                |
0eb0 22 4c 42     ; ld (0x424c), hl      |
0eb3 7a           ; ld a, d              |
0eb4 b3           ; or e                 |
0eb5 21 33 0f     ; ld hl, 0xf33         |
0eb8 28 0b        ; jr z, 0xec5          |
0eba 1b           ; dec de               |
0ebb 7a           ; ld a, d              |
0ebc b7           ; or a                 |
0ebd 21 2d 0f     ; ld hl, 0xf2d         |
0ec0 28 03        ; jr z, 0xec5          |
0ec2 21 28 0f     ; ld hl, 0xf28         |
0ec5 22 4e 42     ; ld (0x424e), hl      |
0ec8 21 46 0f     ; ld hl, 0xf46         |
0ecb 22 54 42     ; ld (0x4254), hl      |
0ece cd aa 0f     ; call 0xfaa           |
0ed1 dd 6e 00     ; ld l, (ix + 0x0)     |
0ed4 dd 66 01     ; ld h, (ix + 0x1)     |
0ed7 22 48 42     ; ld (0x4248), hl      |
0eda 1e ff        ; ld e, 0xff           |
0edc 3e 24        ; ld a, 0x24           |
0ede 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
0ee1 cd 8d 0c     ; call 0xc8d           |
0ee4 20 2b        ; jr nz, 0xf11         |
0ee6 d5           ; push de              |
0ee7 16 00        ; ld d, 0x0            |
0ee9 ed 73 a2 40  ; ld (0x40a2), sp      | set TRKS  (track # for drive 2) = sp
0eed 31 4a 42     ; ld sp, 0x424a        |
0ef0 e1           ; pop hl               |
0ef1 c1           ; pop bc               |
0ef2 d9           ; exx                  |
0ef3 e1           ; pop hl               |
0ef4 d1           ; pop de               |
0ef5 7a           ; ld a, d              |
0ef6 08           ; ex af, af'           |
0ef7 c1           ; pop bc               |
0ef8 ed 78        ; in a, (c)            |
0efa ed 78        ; in a, (c)            |
0efc f2 fa 0e     ; jp p, 0xefa          |
0eff 0d           ; dec c                |
0f00 ed 78        ; in a, (c)            |
0f02 fe 9b        ; cp 0x9b              |
0f04 20 02        ; jr nz, 0xf08         |
0f06 08           ; ex af, af'           |
0f07 e9           ; jp (hl)              |
0f08 ed 7b a2 40  ; ld sp, (0x40a2)      | get sp = TRKS  (track # for drive 2)
0f0c 3e 02        ; ld a, 0x2            |
0f0e d1           ; pop de               |
0f0f 18 04        ; jr 0xf15             |
0f11 1e ff        ; ld e, 0xff           |
0f13 3e 01        ; ld a, 0x1            |
0f15 21 9d 40     ; ld hl, 0x409d        |
0f18 35           ; dec (hl)             |
0f19 20 c6        ; jr nz, 0xee1         |
0f1b 2a 48 42     ; ld hl, (0x4248)      |
0f1e dd 75 00     ; ld (ix + 0x0), l     |
0f21 dd 74 01     ; ld (ix + 0x1), h     |
0f24 b7           ; or a                 |
0f25 c3 45 09     ; jp 0x945             |
0f28 ed 50        ; in d, (c)            |
0f2a 82           ; add a, d             |
0f2b 10 fb        ; djnz 0xf28           |
0f2d ed 50        ; in d, (c)            |
0f2f 82           ; add a, d             |
0f30 10 fb        ; djnz 0xf2d           |
0f32 57           ; ld d, a              |
0f33 43           ; ld b, e              |
0f34 d9           ; exx                  |
0f35 db 19        ; in a, (0x19)         |
0f37 96           ; sub (hl)             |
0f38 c0           ; ret nz               |
0f39 23           ; inc hl               |
0f3a 10 f9        ; djnz 0xf35           |
0f3c d9           ; exx                  |
0f3d db 19        ; in a, (0x19)         |
0f3f fd e9        ; jp (iy)              |
0f41 ed 50        ; in d, (c)            |
0f43 23           ; inc hl               |
0f44 96           ; sub (hl)             |
0f45 82           ; add a, d             |
0f46 10 f9        ; djnz 0xf41           |
0f48 47           ; ld b, a              |
0f49 db 19        ; in a, (0x19)         |
0f4b d9           ; exx                  |
0f4c fd e9        ; jp (iy)              |
0f4e ed 50        ; in d, (c)            |
0f50 82           ; add a, d             |
0f51 10 fb        ; djnz 0xf4e           |
0f53 ed 50        ; in d, (c)            |
0f55 82           ; add a, d             |
0f56 10 fb        ; djnz 0xf53           |
0f58 57           ; ld d, a              |
0f59 db 19        ; in a, (0x19)         |
0f5b 92           ; sub d                |
0f5c d9           ; exx                  |
0f5d 90           ; sub b                |
0f5e 20 a8        ; jr nz, 0xf08         |
0f60 db 19        ; in a, (0x19)         |
0f62 fe 10        ; cp 0x10              |
0f64 20 a2        ; jr nz, 0xf08         |
0f66 eb           ; ex de, hl            |
0f67 2a 20 42     ; ld hl, (0x4220)      |
0f6a ed 52        ; sbc hl, de           |
0f6c ed 7b a2 40  ; ld sp, (0x40a2)      | get sp = TRKS  (track # for drive 2)
0f70 d1           ; pop de               |
0f71 c2 77 0f     ; jp nz, 0xf77         |
0f74 97           ; sub a                |
0f75 18 30        ; jr 0xfa7             |
0f77 1c           ; inc e                |
0f78 dd 34 00     ; inc (ix + 0x0)       |
0f7b c2 81 0f     ; jp nz, 0xf81         |
0f7e dd 34 01     ; inc (ix + 0x1)       |
0f81 cd 67 0b     ; call 0xb67           |
0f84 cc ae 0f     ; call z, 0xfae        |
0f87 2a 48 42     ; ld hl, (0x4248)      |
0f8a 7d           ; ld a, l              |
0f8b dd be 00     ; cp (ix + 0x0)        |
0f8e c2 dc 0e     ; jp nz, 0xedc         |
0f91 7c           ; ld a, h              |
0f92 dd 96 01     ; sub (ix + 0x1)       |
0f95 c2 dc 0e     ; jp nz, 0xedc         |
0f98 dd 7e 0a     ; ld a, (ix + 0xa)     |
0f9b dd 77 00     ; ld (ix + 0x0), a     |
0f9e dd 7e 0b     ; ld a, (ix + 0xb)     |
0fa1 dd 77 01     ; ld (ix + 0x1), a     |
0fa4 3e 04        ; ld a, 0x4            |
0fa6 b7           ; or a                 |
0fa7 c3 45 09     ; jp 0x945             |
0faa cd 67 0b     ; call 0xb67           |
0fad c0           ; ret nz               |
0fae 97           ; sub a                |
0faf dd 77 00     ; ld (ix + 0x0), a     |
0fb2 dd 77 01     ; ld (ix + 0x1), a     |
0fb5 1e ff        ; ld e, 0xff           |
0fb7 c9           ; ret                  |

;write()
0fb8 c5           ; push bc              |
0fb9 dd e1        ; pop ix               |
0fbb 08           ; ex af, af'           |
0fbc 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
0fbf dd be 0f     ; cp (ix + 0xf)        |
0fc2 28 03        ; jr z, 0xfc7          |
0fc4 cd 7e 0d     ; call 0xd7e           | deselect disks
0fc7 3a 00 10     ; ld a, (0x1000)       |
0fca 3c           ; inc a                |
0fcb ca da 0f     ; jp z, 0xfda          | jump to 0xfda if no ROM in addr 0x1000
0fce dd 7e 0f     ; ld a, (ix + 0xf)     | a = Disk #
0fd1 3c           ; inc a                |
0fd2 e6 fe        ; and 0xfe             |
0fd4 fe 06        ; cp 0x6               | max disk # reached ?
0fd6 28 02        ; jr z, 0xfda          |
0fd8 08           ; ex af, af'           |
0fd9 c9           ; ret                  | no, return ok?
0fda e3           ; ex (sp), hl          |
0fdb 23           ; inc hl               |
0fdc 23           ; inc hl               |
0fdd 23           ; inc hl               |
0fde e3           ; ex (sp), hl          |
0fdf 08           ; ex af, af'           |
0fe0 c9           ; ret                  |

;Setup disk: Records:88, Rec per Track: 130, Rec len 24 bytes
0fe1 d9           ; exx                  |
0fe2 3a ad 40     ; ld a, (0x40ad)       | get a = Disk #
0fe5 3c           ; inc a                |
0fe6 e6 fe        ; and 0xfe             |
0fe8 fe 06        ; cp 0x6               |
0fea 21 58 00     ; ld hl, 0x58          | # records = 0x58 (88)
0fed 28 02        ; jr z, 0xff1          |
0fef 2e 82        ; ld l, 0x82           | Records per Track = 0x82 (130)
0ff1 22 a8 40     ; ld (0x40a8), hl      | set Number of Records = hl
0ff4 7d           ; ld a, l              |
0ff5 32 ac 40     ; ld (0x40ac), a       | set Records/Track = a
0ff8 2e 28        ; ld l, 0x28           | Record Length = 0x28 (24)
0ffa 22 aa 40     ; ld (0x40aa), hl      | set Record Length = hl
0ffd 97           ; sub a                |
0ffe d9           ; exx                  |
0fff c9           ; ret                  |

;UNEXPLORED
1000 c3 8d 10     ; jp 0x108d            |

;write?
1003 c3 44 11     ; jp 0x1144            |

;UNEXPLORED
1006 c3 69 11     ; jp 0x1169            |

;key search jump vector
1009 c3 6b 16     ; jp 0x166b            |

;UNEXPLORED
100c c3 30 10     ; jp 0x1030            |
100f c3 18 15     ; jp 0x1518            |
1012 c3 c8 14     ; jp 0x14c8            |

;unknown IWS code jump vector
1015 c3 6a 15     ; jp 0x156a            |
1018 c3 ac 15     ; jp 0x15ac            |
101b c3 99 13     ; jp 0x1399            |
101e c3 1b 14     ; jp 0x141b            |
1021 c3 2f 11     ; jp 0x112f            |
1024 c3 3f 11     ; jp 0x113f            |
1027 c3 25 13     ; jp 0x1325            |
102a c3 44 13     ; jp 0x1344            |
102d c3 51 13     ; jp 0x1351            |
1030 97           ; sub a                |
1031 32 ad 40     ; ld (0x40ad), a       | set Disk # = a
1034 3e 80        ; ld a, 0x80           |
1036 32 13 42     ; ld (0x4213), a       |
1039 e5           ; push hl              |
103a 3a a5 40     ; ld a, (0x40a5)       | get a = AD (access denined)
103d 2f           ; cpl                  |
103e 47           ; ld b, a              |
103f 21 13 42     ; ld hl, 0x4213        |
1042 7e           ; ld a, (hl)           |
1043 07           ; rlca                 |
1044 77           ; ld (hl), a           |
1045 21 ad 40     ; ld hl, 0x40ad        |
1048 34           ; inc (hl)             |
1049 a0           ; and b                |
104a e1           ; pop hl               |
104b 28 2e        ; jr z, 0x107b         |
104d e5           ; push hl              |
104e 11 02 00     ; ld de, 0x2           |
1051 01 9f 40     ; ld bc, 0x409f        |
1054 97           ; sub a                |
1055 02           ; ld (bc), a           |
1056 0b           ; dec bc               |
1057 02           ; ld (bc), a           |
1058 3e 08        ; ld a, 0x8            |
105a 23           ; inc hl               |
105b 23           ; inc hl               |
105c cd 09 10     ; call 0x1009          |
105f e1           ; pop hl               |
1060 c2 7b 10     ; jp nz, 0x107b        |
1063 11 18 00     ; ld de, 0x18          |
1066 3e 01        ; ld a, 0x1            |
1068 cd 00 10     ; call 0x1000          |
106b 21 ad 40     ; ld hl, 0x40ad        |
106e 46           ; ld b, (hl)           |
106f 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
1072 11 0f 00     ; ld de, 0xf           |
1075 19           ; add hl, de           |
1076 70           ; ld (hl), b           |
1077 01 03 16     ; ld bc, 0x1603        |
107a c9           ; ret                  |
107b e5           ; push hl              |
107c 21 13 42     ; ld hl, 0x4213        |
107f 7e           ; ld a, (hl)           |
1080 fe 80        ; cp 0x80              |
1082 fa 3a 10     ; jp m, 0x103a         |
1085 3e 04        ; ld a, 0x4            |
1087 b7           ; or a                 |
1088 e1           ; pop hl               |
1089 01 03 16     ; ld bc, 0x1603        |
108c c9           ; ret                  |
108d cd de 12     ; call 0x12de          |
1090 c0           ; ret nz               |
1091 21 9d 40     ; ld hl, 0x409d        |
1094 36 20        ; ld (hl), 0x20        | set ERC (error count) to 32
1096 cd 44 13     ; call 0x1344          |
1099 cd c1 12     ; call 0x12c1          |
109c cd 25 13     ; call 0x1325          |
109f 1e ff        ; ld e, 0xff           |
10a1 cd 51 13     ; call 0x1351          |
10a4 ca 2f 11     ; jp z, 0x112f         |
10a7 cd 75 14     ; call 0x1475          |
10aa c2 2f 11     ; jp nz, 0x112f        |
10ad 3a b8 40     ; ld a, (0x40b8)       | get a = PART2 unused length
10b0 3c           ; inc a                |
10b1 47           ; ld b, a              |
10b2 0e 09        ; ld c, 0x9            |
10b4 d9           ; exx                  |
10b5 2a b6 40     ; ld hl, (0x40b6)      | get hl = PART1 (length to be transferred)
10b8 7c           ; ld a, h              |
10b9 1f           ; rra                  |
10ba 7d           ; ld a, l              |
10bb 1f           ; rra                  |
10bc 47           ; ld b, a              |
10bd 21 e7 10     ; ld hl, 0x10e7        |
10c0 30 04        ; jr nc, 0x10c6        |
10c2 21 ed 10     ; ld hl, 0x10ed        |
10c5 04           ; inc b                |
10c6 e5           ; push hl              |
10c7 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
10ca 2b           ; dec hl               |
10cb 56           ; ld d, (hl)           |
10cc db 0a        ; in a, (0xa)          |
10ce 0e 0a        ; ld c, 0xa            |
10d0 ed 78        ; in a, (c)            |
10d2 f2 d0 10     ; jp p, 0x10d0         |
10d5 0d           ; dec c                |
10d6 db 09        ; in a, (0x9)          |
10d8 fe 9b        ; cp 0x9b              |
10da c8           ; ret z                |
10db e1           ; pop hl               |
10dc 21 9d 40     ; ld hl, 0x409d        |
10df 3e 02        ; ld a, 0x2            |
10e1 35           ; dec (hl)             |
10e2 28 4b        ; jr z, 0x112f         |
10e4 18 b9        ; jr 0x109f            |
10e6 23           ; inc hl               |
10e7 ed 58        ; in e, (c)            |
10e9 72           ; ld (hl), d           |
10ea 23           ; inc hl               |
10eb 73           ; ld (hl), e           |
10ec 83           ; add a, e             |
10ed ed 50        ; in d, (c)            |
10ef 82           ; add a, d             |
10f0 05           ; dec b                |
10f1 20 f3        ; jr nz, 0x10e6        |
10f3 d9           ; exx                  |
10f4 ed 68        ; in l, (c)            |
10f6 85           ; add a, l             |
10f7 05           ; dec b                |
10f8 20 fa        ; jr nz, 0x10f4        |
10fa 95           ; sub l                |
10fb bd           ; cp l                 |
10fc db 09        ; in a, (0x9)          |
10fe 20 dc        ; jr nz, 0x10dc        |
1100 d9           ; exx                  |
1101 23           ; inc hl               |
1102 72           ; ld (hl), d           |
1103 fe 10        ; cp 0x10              | is end of record?
1105 20 d5        ; jr nz, 0x10dc        |
1107 07           ; rlca                 |
1108 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
110b 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
110e eb           ; ex de, hl            |
110f 2a 20 42     ; ld hl, (0x4220)      |
1112 19           ; add hl, de           |
1113 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
1116 d9           ; exx                  |
1117 dd 34 00     ; inc (ix + 0x0)       |
111a 20 03        ; jr nz, 0x111f        |
111c dd 34 01     ; inc (ix + 0x1)       |
111f 3e 20        ; ld a, 0x20           |
1121 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
1124 97           ; sub a                |
1125 21 9c 40     ; ld hl, 0x409c        |
1128 1c           ; inc e                |
1129 35           ; dec (hl)             |
112a c2 a1 10     ; jp nz, 0x10a1        |
112d 18 10        ; jr 0x113f            | jump to return of (unknown) disk function

;increment current record number (and return)
112f dd 34 00     ; inc (ix + 0x0)       |
1132 20 03        ; jr nz, 0x1137        |
1134 dd 34 01     ; inc (ix + 0x1)       |
1137 21 9c 40     ; ld hl, 0x409c        |
113a 35           ; dec (hl)             |
113b c2 2f 11     ; jp nz, 0x112f        |
113e b7           ; or a                 |

;return from (unknown) disk function
113f fb           ; ei                   |
1140 dd e5        ; push ix              |
1142 c1           ; pop bc               |
1143 c9           ; ret                  |

;write??
1144 cd de 12     ; call 0x12de          |
1147 c0           ; ret nz               |
1148 cd 44 13     ; call 0x1344          |
114b cd c1 12     ; call 0x12c1          |
114e dd 5e 0e     ; ld e, (ix + 0xe)     |
1151 16 00        ; ld d, 0x0            |
1153 dd 7e 10     ; ld a, (ix + 0x10)    |
1156 dd 96 12     ; sub (ix + 0x12)      |
1159 21 00 00     ; ld hl, 0x0           |
115c 3d           ; dec a                |
115d 19           ; add hl, de           |
115e 3c           ; inc a                |
115f 20 fc        ; jr nz, 0x115d        |
1161 dd 75 0a     ; ld (ix + 0xa), l     |
1164 dd 74 0b     ; ld (ix + 0xb), h     |
1167 18 07        ; jr 0x1170            |
1169 cd de 12     ; call 0x12de          |
116c c0           ; ret nz               |
116d cd c1 12     ; call 0x12c1          |
1170 21 9d 40     ; ld hl, 0x409d        |
1173 36 20        ; ld (hl), 0x20        |
1175 dd 7e 13     ; ld a, (ix + 0x13)    |
1178 b7           ; or a                 |
1179 3e 07        ; ld a, 0x7            |
117b fa 2f 11     ; jp m, 0x112f         |
117e 21 29 42     ; ld hl, 0x4229        |
1181 77           ; ld (hl), a           |
1182 21 22 42     ; ld hl, 0x4222        |
1185 36 00        ; ld (hl), 0x0         |
1187 22 24 42     ; ld (0x4224), hl      |
118a cd 25 13     ; call 0x1325          |
118d 1e ff        ; ld e, 0xff           |
118f cd 51 13     ; call 0x1351          |
1192 28 57        ; jr z, 0x11eb         |
1194 cd 75 14     ; call 0x1475          |
1197 20 96        ; jr nz, 0x112f        |
1199 db 09        ; in a, (0x9)          |
119b 3e 80        ; ld a, 0x80           |
119d d3 0b        ; out (0xb), a         |
119f d9           ; exx                  |
11a0 2a b6 40     ; ld hl, (0x40b6)      | get hl = PART1 (length to be transferred)
11a3 db 09        ; in a, (0x9)          |
11a5 eb           ; ex de, hl            |
11a6 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
11a9 db 09        ; in a, (0x9)          |
11ab 1b           ; dec de               |
11ac 7a           ; ld a, d              |
11ad 13           ; inc de               |
11ae 0f           ; rrca                 |
11af db 09        ; in a, (0x9)          |
11b1 3a b8 40     ; ld a, (0x40b8)       | get a = PART2 unused length
11b4 57           ; ld d, a              |
11b5 db 09        ; in a, (0x9)          |
11b7 14           ; inc d                |
11b8 01 09 00     ; ld bc, 0x9           |
11bb db 09        ; in a, (0x9)          |
11bd 3e 9b        ; ld a, 0x9b           |
11bf d3 09        ; out (0x9), a         | write Data Record identifier 0x9b
11c1 d2 b6 12     ; jp nc, 0x12b6        |
11c4 86           ; add a, (hl)          |
11c5 ed a3        ; outi                 | write (hl+i) to disk, i = 0 to b
11c7 20 fb        ; jr nz, 0x11c4        |
11c9 43           ; ld b, e              |
11ca 86           ; add a, (hl)          |
11cb ed a3        ; outi                 | write (hl+i) to disk, i = 0 to b
11cd 20 fb        ; jr nz, 0x11ca        |
11cf 15           ; dec d                |
11d0 28 05        ; jr z, 0x11d7         |
11d2 ed 41        ; out (c), b           | write checksum
11d4 15           ; dec d                |
11d5 20 fb        ; jr nz, 0x11d2        |
11d7 d3 09        ; out (0x9), a         |
11d9 2a 24 42     ; ld hl, (0x4224)      |
11dc 16 10        ; ld d, 0x10           | write end of record terminator 0x10
11de ed 51        ; out (c), d           |
11e0 86           ; add a, (hl)          |
11e1 77           ; ld (hl), a           |
11e2 af           ; xor a                |
11e3 d3 09        ; out (0x9), a         |
11e5 00           ; nop                  |
11e6 00           ; nop                  |
11e7 d3 09        ; out (0x9), a         |
11e9 d3 0b        ; out (0xb), a         |
11eb 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
11ee eb           ; ex de, hl            |
11ef 2a 20 42     ; ld hl, (0x4220)      |
11f2 19           ; add hl, de           |
11f3 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
11f6 d9           ; exx                  |
11f7 1c           ; inc e                |
11f8 dd 34 00     ; inc (ix + 0x0)       |
11fb 20 03        ; jr nz, 0x1200        |
11fd dd 34 01     ; inc (ix + 0x1)       |
1200 21 9b 40     ; ld hl, 0x409b        |
1203 35           ; dec (hl)             |
1204 20 89        ; jr nz, 0x118f        |
1206 23           ; inc hl               |
1207 7e           ; ld a, (hl)           |
1208 ed 44        ; neg                  |
120a dd 86 00     ; add a, (ix + 0x0)    |
120d dd 77 00     ; ld (ix + 0x0), a     |
1210 38 03        ; jr c, 0x1215         |
1212 dd 35 01     ; dec (ix + 0x1)       |
1215 1e ff        ; ld e, 0xff           |
1217 3e 23        ; ld a, 0x23           |
1219 32 24 42     ; ld (0x4224), a       |
121c cd 51 13     ; call 0x1351          |
121f ca 2f 11     ; jp z, 0x112f         |
1222 cd 75 14     ; call 0x1475          |
1225 c2 2f 11     ; jp nz, 0x112f        |
1228 db 09        ; in a, (0x9)          |
122a dd 6e 0c     ; ld l, (ix + 0xc)     |
122d dd 66 0d     ; ld h, (ix + 0xd)     |
1230 2c           ; inc l                |
1231 25           ; dec h                |
1232 28 03        ; jr z, 0x1237         |
1234 2d           ; dec l                |
1235 26 01        ; ld h, 0x1            |
1237 01 09 00     ; ld bc, 0x9           |
123a db 0a        ; in a, (0xa)          |
123c db 0a        ; in a, (0xa)          |
123e b7           ; or a                 |
123f f2 3c 12     ; jp p, 0x123c         |
1242 db 09        ; in a, (0x9)          |
1244 80           ; add a, b             |
1245 ed 40        ; in b, (c)            |
1247 2d           ; dec l                |
1248 20 fa        ; jr nz, 0x1244        |
124a 80           ; add a, b             |
124b ed 40        ; in b, (c)            |
124d 25           ; dec h                |
124e 20 fa        ; jr nz, 0x124a        |
1250 b8           ; cp b                 |
1251 db 09        ; in a, (0x9)          |
1253 20 49        ; jr nz, 0x129e        |
1255 fe 10        ; cp 0x10              |
1257 20 45        ; jr nz, 0x129e        |
1259 3a 22 42     ; ld a, (0x4222)       |
125c 90           ; sub b                |
125d 32 22 42     ; ld (0x4222), a       |
1260 21 9d 40     ; ld hl, 0x409d        |
1263 36 14        ; ld (hl), 0x14        |
1265 2a 20 42     ; ld hl, (0x4220)      |
1268 44           ; ld b, h              |
1269 4d           ; ld c, l              |
126a 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
126d 09           ; add hl, bc           |
126e 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
1271 1c           ; inc e                |
1272 dd 34 00     ; inc (ix + 0x0)       |
1275 20 03        ; jr nz, 0x127a        |
1277 dd 34 01     ; inc (ix + 0x1)       |
127a 21 9c 40     ; ld hl, 0x409c        |
127d 35           ; dec (hl)             |
127e 20 9c        ; jr nz, 0x121c        |
1280 3a 22 42     ; ld a, (0x4222)       |
1283 b7           ; or a                 |
1284 ca 3f 11     ; jp z, 0x113f         |

;unknown (disk?) function
1285 3f           ; ccf                  |
1286 11 21 29     ; ld de, 0x2921        |
1289 42           ; ld b, d              |
128a 35           ; dec (hl)             |
128b 3e 03        ; ld a, 0x3            |
128d 28 15        ; jr z, 0x12a4         |
128f 2a 26 42     ; ld hl, (0x4226)      |
1292 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
1295 3a 28 42     ; ld a, (0x4228)       |
1298 32 9c 40     ; ld (0x409c), a       | set SNRT  (# recs to be transfd) = a
129b c3 82 11     ; jp 0x1182            |
129e 3e 03        ; ld a, 0x3            |
12a0 21 9d 40     ; ld hl, 0x409d        |
12a3 35           ; dec (hl)             |
12a4 ca 2f 11     ; jp z, 0x112f         |
12a7 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
12aa 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
12ad 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
12b0 32 9b 40     ; ld (0x409b), a       | set NRT   (disk record count) = a
12b3 c3 8d 11     ; jp 0x118d            |
12b6 86           ; add a, (hl)          |
12b7 ed a3        ; outi                 |
12b9 43           ; ld b, e              |
12ba 05           ; dec b                |
12bb 86           ; add a, (hl)          |
12bc ed a3        ; outi                 |
12be c3 ca 11     ; jp 0x11ca            |

;Set PART1 and PART2
12c1 dd 4e 0c     ; ld c, (ix + 0xc)     | bc = record length
12c4 dd 46 0d     ; ld b, (ix + 0xd)     |
12c7 7b           ; ld a, e              |
12c8 2f           ; cpl                  |
12c9 6f           ; ld l, a              |
12ca 7a           ; ld a, d              |
12cb 2f           ; cpl                  |
12cc 67           ; ld h, a              |
12cd 09           ; add hl, bc           |
12ce 23           ; inc hl               |
12cf 38 05        ; jr c, 0x12d6         |
12d1 50           ; ld d, b              |
12d2 59           ; ld e, c              |
12d3 21 00 00     ; ld hl, 0x0           |
12d6 22 b8 40     ; ld (0x40b8), hl      | set PART2 unused length = hl
12d9 eb           ; ex de, hl            |
12da 22 b6 40     ; ld (0x40b6), hl      | set PART1 (length to be transferred) = hl
12dd c9           ; ret                  |

;Select disk, wait for drive/data ready
12de 22 99 40     ; ld (0x4099), hl      | set THERE (addr for disk transfer) = hl
12e1 32 9c 40     ; ld (0x409c), a       | set SNRT  (# recs to be transfd) = a
12e4 6b           ; ld l, e              |
12e5 62           ; ld h, d              |
12e6 22 20 42     ; ld (0x4220), hl      | Store INDEX (curr rec no on index)
12e9 dd 6e 0f     ; ld l, (ix + 0xf)     | get l = disk# on INDEX
12ec 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
12ef bd           ; cp l                 |
12f0 28 27        ; jr z, 0x1319         |
12f2 3e 80        ; ld a, 0x80           |
12f4 65           ; ld h, l              |
12f5 07           ; rlca                 |
12f6 2d           ; dec l                |
12f7 20 fc        ; jr nz, 0x12f5        |
12f9 6c           ; ld l, h              |
12fa 67           ; ld h, a              |
12fb d3 0a        ; out (0xa), a         |
12fd db 0a        ; in a, (0xa)          |
12ff 0f           ; rrca                 |
1300 38 e7        ; jr c, 0x12e9         |
1302 7c           ; ld a, h              |
1303 d3 0a        ; out (0xa), a         | select disk
1305 7d           ; ld a, l              |
1306 32 a0 40     ; ld (0x40a0), a       | set DISK  (selected disk drive #) = a
1309 3e ff        ; ld a, 0xff           |
130b 32 a1 40     ; ld (0x40a1), a       | set TRKS  (track # for drive 1) = a
130e 2e 24        ; ld l, 0x24           | Skip 143 bytes (track 0)
1310 cd 0e 14     ; call 0x140e          |
1313 cd 0e 14     ; call 0x140e          | Skip 1023 bytes (track 0)
1316 cd 0e 14     ; call 0x140e          | Skip 1023 bytes (track 0)
1319 db 0a        ; in a, (0xa)          | get disk status
131b e6 40        ; and 0x40             | check if disk is ready
131d 28 02        ; jr z, 0x1321         | goto error return
131f 97           ; sub a                |
1320 c9           ; ret                  | return OK
1321 3e 05        ; ld a, 0x5            |
1323 b7           ; or a                 |
1324 c9           ; ret                  | return error # 5 (inferred)

;Copy rec before last to ROS INDEX
1325 dd 7e 16     ; ld a, (ix + 0x16)    | rec before last
1328 dd 77 00     ; ld (ix + 0x0), a     |
132b dd 7e 17     ; ld a, (ix + 0x17)    |
132e dd 77 01     ; ld (ix + 0x1), a     | set current record number on INDEX
1331 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
1334 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
1337 22 26 42     ; ld (0x4226), hl      |
133a 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
133d 32 9b 40     ; ld (0x409b), a       | set NRT   (disk record count) = a
1340 32 28 42     ; ld (0x4228), a       |
1343 c9           ; ret                  |

;Adjust last record number???
1344 dd 7e 00     ; ld a, (ix + 0x0)     | copy record number (hi+lo) to last reordnumber on INDEX FD
1347 dd 77 16     ; ld (ix + 0x16), a    |
134a dd 7e 01     ; ld a, (ix + 0x1)     |
134d dd 77 17     ; ld (ix + 0x17), a    |
1350 c9           ; ret                  |

;Compare ROS INDEX with INDEX FD???
1351 dd 7e 01     ; ld a, (ix + 0x1)     | get a = current record # on INDEX (LO)
1354 dd be 0b     ; cp (ix + 0xb)        | compare with same (LO) on INDEX FD
1357 c2 60 13     ; jp nz, 0x1360        |
135a dd 7e 00     ; ld a, (ix + 0x0)     | compare with same (HI) on INDEX FD
135d dd be 0a     ; cp (ix + 0xa)        |
1360 d8           ; ret c                |
1361 97           ; sub a                |
1362 3e 06        ; ld a, 0x6            |
1364 c9           ; ret                  |

;Search for valid ID Record
1365 d5           ; push de              |
1366 0e 0a        ; ld c, 0xa            |
1368 21 10 27     ; ld hl, 0x2710        | test for disk ready h*l times (0x27 * 0x10)
136b f3           ; di                   |
136c ed 78        ; in a, (c)            |
136e ed 78        ; in a, (c)            |
1370 fa 82 13     ; jp m, 0x1382         |
1373 2d           ; dec l                |
1374 20 f8        ; jr nz, 0x136e        |
1376 ed 78        ; in a, (c)            |
1378 fa 82 13     ; jp m, 0x1382         |
137b 25           ; dec h                |
137c 20 f0        ; jr nz, 0x136e        |
137e fb           ; ei                   |
137f d1           ; pop de               |
1380 3c           ; inc a                |
1381 c9           ; ret                  | drive was not ready for a while
1382 db 09        ; in a, (0x9)          | read byte (ID record)
1384 fe 9e        ; cp 0x9e              | check if ID record (0x9e)
1386 20 e4        ; jr nz, 0x136c        |
1388 0d           ; dec c                |
1389 ed 40        ; in b, (c)            | get b = Track
138b ed 48        ; in c, (c)            | get c = Sector
138d db 09        ; in a, (0x9)          | get a = check sum
138f 90           ; sub b                |
1390 91           ; sub c                |
1391 20 d9        ; jr nz, 0x136c        | bad cksum, find next ID record
1393 fb           ; ei                   | ID Record, read with good cksum
1394 21 a1 40     ; ld hl, 0x40a1        |
1397 70           ; ld (hl), b           | store track# for current record
1398 d1           ; pop de               |
1399 21 a1 40     ; ld hl, 0x40a1        | Track # for drive 1
139c 7e           ; ld a, (hl)           |
139d 72           ; ld (hl), d           |
139e fe fe        ; cp 0xfe              | check for ?? end of tracks or not index track
13a0 d0           ; ret nc               |
13a1 47           ; ld b, a              |
13a2 21 00 4d     ; ld hl, 0x4d00        |
13a5 bc           ; cp h                 |
13a6 38 06        ; jr c, 0x13ae         |
13a8 ed 44        ; neg                  |
13aa c6 99        ; add a, 0x99          |
13ac 47           ; ld b, a              |
13ad 2c           ; inc l                |
13ae 7a           ; ld a, d              |
13af bc           ; cp h                 |
13b0 38 07        ; jr c, 0x13b9         |
13b2 ed 44        ; neg                  |
13b4 c6 99        ; add a, 0x99          |
13b6 57           ; ld d, a              |
13b7 cb fd        ; set 0x7, l           |
13b9 7d           ; ld a, l              |
13ba b7           ; or a                 |
13bb 28 18        ; jr z, 0x13d5         |
13bd fe 81        ; cp 0x81              |
13bf 28 14        ; jr z, 0x13d5         |
13c1 3a a0 40     ; ld a, (0x40a0)       | get a = DISK  (selected disk drive #)
13c4 67           ; ld h, a              |
13c5 3e 80        ; ld a, 0x80           |
13c7 07           ; rlca                 |
13c8 25           ; dec h                |
13c9 20 fc        ; jr nz, 0x13c7        |
13cb cb 85        ; res 0x0, l           |
13cd b5           ; or l                 |
13ce d3 0a        ; out (0xa), a         | select drive (and side)
13d0 2e 05        ; ld l, 0x5            |
13d2 cd 0e 14     ; call 0x140e          | skip 23 bytes
13d5 78           ; ld a, b              |
13d6 92           ; sub d                |
13d7 47           ; ld b, a              |
13d8 c8           ; ret z                |
13d9 0e 00        ; ld c, 0x0            |
13db 30 05        ; jr nc, 0x13e2        |
13dd 0e 40        ; ld c, 0x40           | step direction UP
13df ed 44        ; neg                  |
13e1 47           ; ld b, a              |
13e2 79           ; ld a, c              |
13e3 b7           ; or a                 |
13e4 20 06        ; jr nz, 0x13ec        |
13e6 db 0a        ; in a, (0xa)          |
13e8 e6 10        ; and 0x10             | check if at Track 0
13ea 20 1d        ; jr nz, 0x1409        |
13ec 3e 20        ; ld a, 0x20           | Track step bit
13ee b1           ; or c                 |
13ef d3 0b        ; out (0xb), a         |
13f1 79           ; ld a, c              |
13f2 d3 0b        ; out (0xb), a         |
13f4 2e 30        ; ld l, 0x30           | Skip 191 bytes
13f6 cd 0e 14     ; call 0x140e          |
13f9 db 0a        ; in a, (0xa)          |
13fb e6 02        ; and 0x2              | Double density?
13fd 20 05        ; jr nz, 0x1404        |
13ff 2e 4d        ; ld l, 0x4d           | Skip 307 bytes
1401 cd 0e 14     ; call 0x140e          |
1404 05           ; dec b                |
1405 20 db        ; jr nz, 0x13e2        |
1407 04           ; inc b                |
1408 c9           ; ret                  |
1409 01 40 03     ; ld bc, 0x340         |
140c 18 de        ; jr 0x13ec            | step to next track

;skip 4*l + 3 bytes
140e db 09        ; in a, (0x9)          | read byte from disk
1410 00           ; nop                  |
1411 db 09        ; in a, (0x9)          | read byte from disk
1413 2d           ; dec l                |
1414 db 09        ; in a, (0x9)          | read byte from disk
1416 c8           ; ret z                |
1417 db 09        ; in a, (0x9)          | read byte from disk
1419 18 f3        ; jr 0x140e            |

;UNEXPLORED
141b 21 9d 40     ; ld hl, 0x409d        |
141e 36 0a        ; ld (hl), 0xa         | set ERC to 10
1420 fb           ; ei                   |
1421 dd 5e 00     ; ld e, (ix + 0x0)     | record number (HI) from INDEX FD
1424 dd 56 01     ; ld d, (ix + 0x1)     | record number (LO) from INDEX FD
1427 dd 7e 0e     ; ld a, (ix + 0xe)     |
142a dd 46 10     ; ld b, (ix + 0x10)    | first track (HI) ?
142d 05           ; dec b                |
142e 2f           ; cpl                  |
142f 3c           ; inc a                |
1430 6f           ; ld l, a              |
1431 26 ff        ; ld h, 0xff           |
1433 eb           ; ex de, hl            |
1434 78           ; ld a, b              |
1435 19           ; add hl, de           |
1436 3c           ; inc a                |
1437 38 fc        ; jr c, 0x1435         |
1439 57           ; ld d, a              |
143a 7d           ; ld a, l              |
143b 93           ; sub e                |
143c 5f           ; ld e, a              |
143d cd 65 13     ; call 0x1365          |
1440 21 a1 40     ; ld hl, 0x40a1        |
1443 56           ; ld d, (hl)           |
1444 28 2f        ; jr z, 0x1475         |
1446 2e 46        ; ld l, 0x46           | Skip 279 bytes
1448 cd 0e 14     ; call 0x140e          |
144b 21 00 80     ; ld hl, 0x8000        |
144e 0e 0a        ; ld c, 0xa            |
1450 2d           ; dec l                |
1451 28 0b        ; jr z, 0x145e         |
1453 ed 40        ; in b, (c)            |
1455 f2 50 14     ; jp p, 0x1450         |
1458 db 09        ; in a, (0x9)          |
145a d6 9b        ; sub 0x9b             | Data Record (0x9b)
145c 28 17        ; jr z, 0x1475         |
145e 25           ; dec h                |
145f 20 ef        ; jr nz, 0x1450        |
1461 21 9d 40     ; ld hl, 0x409d        | No Data Record found after 128 reads
1464 35           ; dec (hl)             |
1465 01 00 01     ; ld bc, 0x100         |
1468 28 3a        ; jr z, 0x14a4         |
146a db 0a        ; in a, (0xa)          | get disk status
146c e6 10        ; and 0x10             | track 0 selected
146e 20 34        ; jr nz, 0x14a4        |
1470 cd e2 13     ; call 0x13e2          |
1473 18 d1        ; jr 0x1446            |

;UNEXPLORED
1475 7b           ; ld a, e              |
1476 dd 6e 0e     ; ld l, (ix + 0xe)     | Track/Record
1479 bd           ; cp l                 |
147a 30 a4        ; jr nc, 0x1420        |

;search for INDEX file?
147c 21 00 08     ; ld hl, 0x800         |
147f 0e 0a        ; ld c, 0xa            |
1481 f3           ; di                   |
1482 db 0a        ; in a, (0xa)          | get disk status
1484 ed 78        ; in a, (c)            |
1486 f2 84 14     ; jp p, 0x1484         |
1489 db 09        ; in a, (0x9)          | read byte (ID record) from disk
148b fe 9e        ; cp 0x9e              | check if ID record (0x9e)
148d 20 0f        ; jr nz, 0x149e        |
148f db 09        ; in a, (0x9)          | read byte (TRACK#)    from disk
1491 ba           ; cp d                 |
1492 20 14        ; jr nz, 0x14a8        |
1494 db 09        ; in a, (0x9)          | read byte (SECTOR#)   from disk
1496 bb           ; cp e                 |
1497 20 05        ; jr nz, 0x149e        |
1499 db 09        ; in a, (0x9)          | read byte (CHECK SUM) from disk
149b 93           ; sub e                |
149c 92           ; sub d                |
149d c8           ; ret z                | return if checksum good
149e fb           ; ei                   |
149f 2b           ; dec hl               |
14a0 7d           ; ld a, l              |
14a1 b4           ; or h                 |
14a2 20 dd        ; jr nz, 0x1481        |
14a4 3e 01        ; ld a, 0x1            | return error code 1?
14a6 b7           ; or a                 |
14a7 c9           ; ret                  |

;UNEXPLORED
14a8 4f           ; ld c, a              |
14a9 db 09        ; in a, (0x9)          | read byte from disk
14ab 47           ; ld b, a              |
14ac db 09        ; in a, (0x9)          | read byte from disk
14ae 91           ; sub c                |
14af 90           ; sub b                |
14b0 41           ; ld b, c              |
14b1 0e 0a        ; ld c, 0xa            |
14b3 20 cc        ; jr nz, 0x1481        | checksum good if a = 0
14b5 db 09        ; in a, (0x9)          |
14b7 fe 10        ; cp 0x10              | end of record marker
14b9 20 c6        ; jr nz, 0x1481        |
14bb 78           ; ld a, b              |
14bc 32 a1 40     ; ld (0x40a1), a       | set TRKS  (track # for drive 1) = a
14bf 21 9d 40     ; ld hl, 0x409d        |
14c2 35           ; dec (hl)             |
14c3 28 df        ; jr z, 0x14a4         |
14c5 c3 20 14     ; jp 0x1420            |
14c8 01 0a 00     ; ld bc, 0xa           |
14cb 54           ; ld d, h              |
14cc 5d           ; ld e, l              |
14cd 09           ; add hl, bc           |
14ce eb           ; ex de, hl            |
14cf 7e           ; ld a, (hl)           |
14d0 36 00        ; ld (hl), 0x0         |
14d2 12           ; ld (de), a           |
14d3 23           ; inc hl               |
14d4 13           ; inc de               |
14d5 7e           ; ld a, (hl)           |
14d6 36 00        ; ld (hl), 0x0         |
14d8 12           ; ld (de), a           |
14d9 13           ; inc de               |
14da 13           ; inc de               |
14db 13           ; inc de               |
14dc 13           ; inc de               |
14dd 1a           ; ld a, (de)           |
14de 32 ad 40     ; ld (0x40ad), a       | set Disk # = a
14e1 fe 07        ; cp 0x7               |
14e3 fa f0 14     ; jp m, 0x14f0         |
14e6 28 04        ; jr z, 0x14ec         |
14e8 fe 08        ; cp 0x8               |
14ea 20 04        ; jr nz, 0x14f0        |
14ec 3e 7a        ; ld a, 0x7a           |
14ee 18 02        ; jr 0x14f2            |
14f0 3e 82        ; ld a, 0x82           |
14f2 32 ac 40     ; ld (0x40ac), a       | set Records/Track = a
14f5 97           ; sub a                |
14f6 12           ; ld (de), a           |
14f7 11 02 00     ; ld de, 0x2           |
14fa 01 9e 40     ; ld bc, 0x409e        |
14fd 02           ; ld (bc), a           |
14fe 03           ; inc bc               |
14ff 02           ; ld (bc), a           |
1500 0b           ; dec bc               |
1501 3e 08        ; ld a, 0x8            |
1503 e5           ; push hl              |
1504 23           ; inc hl               |
1505 cd 09 10     ; call 0x1009          |
1508 e1           ; pop hl               |
1509 20 09        ; jr nz, 0x1514        |
150b 2b           ; dec hl               |
150c 3e 01        ; ld a, 0x1            |
150e 11 14 00     ; ld de, 0x14          |
1511 cc 03 10     ; call z, 0x1003       |
1514 01 03 16     ; ld bc, 0x1603        |
1517 c9           ; ret                  |
1518 21 d0 40     ; ld hl, 0x40d0        |
151b cd 30 10     ; call 0x1030          |
151e c0           ; ret nz               |
151f 06 03        ; ld b, 0x3            |
1521 3a da 40     ; ld a, (0x40da)       | get a = Number of Records (LFILE)
1524 4f           ; ld c, a              |
1525 78           ; ld a, b              |
1526 b9           ; cp c                 |
1527 30 37        ; jr nc, 0x1560        |
1529 21 d0 40     ; ld hl, 0x40d0        |
152c 70           ; ld (hl), b           |
152d 04           ; inc b                |
152e 04           ; inc b                |
152f 04           ; inc b                |
1530 04           ; inc b                |
1531 11 ff 00     ; ld de, 0xff          |
1534 c5           ; push bc              |
1535 01 d0 40     ; ld bc, 0x40d0        |
1538 21 00 42     ; ld hl, 0x4200        |
153b 3e 01        ; ld a, 0x1            |
153d cd 00 10     ; call 0x1000          |
1540 e1           ; pop hl               |
1541 c0           ; ret nz               |
1542 e5           ; push hl              |
1543 21 ff 42     ; ld hl, 0x42ff        |
1546 36 00        ; ld (hl), 0x0         |
1548 2c           ; inc l                |
1549 c1           ; pop bc               |
154a 7e           ; ld a, (hl)           |
154b b7           ; or a                 |
154c 28 d3        ; jr z, 0x1521         |
154e c5           ; push bc              |
154f 23           ; inc hl               |
1550 5e           ; ld e, (hl)           |
1551 23           ; inc hl               |
1552 56           ; ld d, (hl)           |
1553 23           ; inc hl               |
1554 4e           ; ld c, (hl)           |
1555 0c           ; inc c                |
1556 0d           ; dec c                |
1557 23           ; inc hl               |
1558 28 ef        ; jr z, 0x1549         |
155a 06 00        ; ld b, 0x0            |
155c ed b0        ; ldir                 |
155e 18 e9        ; jr 0x1549            |
1560 3e 03        ; ld a, 0x3            |
1562 a0           ; and b                |
1563 3d           ; dec a                |
1564 fe ff        ; cp 0xff              |
1566 c8           ; ret z                |
1567 47           ; ld b, a              |
1568 18 b7        ; jr 0x1521            |

;unknown IWS function i
156a 97           ; sub a                |
156b d3 0b        ; out (0xb), a         |
156d 32 a0 40     ; ld (0x40a0), a       | set DISK  (selected disk drive #) = a
1570 3e 00        ; ld a, 0x0            |
1572 d3 0a        ; out (0xa), a         |
1574 21 a8 40     ; ld hl, 0x40a8        |
1577 3e 82        ; ld a, 0x82           |
1579 77           ; ld (hl), a           |
157a 23           ; inc hl               |
157b 23           ; inc hl               |
157c 36 28        ; ld (hl), 0x28        |
157e 23           ; inc hl               |
157f 23           ; inc hl               |
1580 77           ; ld (hl), a           |
1581 cd 94 15     ; call 0x1594          |
1584 ca 37 14     ; jp z, 0x1437         |
1587 cd 9c 15     ; call 0x159c          |
158a ca 15 10     ; jp z, 0x1015         |
158d c9           ; ret                  |

;UNEXPLORED
158e 4d           ; ld c, l              |
158f 55           ; ld d, l              |
1590 58           ; ld e, b              |
1591 49           ; ld c, c              |
1592 57           ; ld d, a              |
1593 53           ; ld d, e              |

;unknown IWS function ii
1594 21 8e 15     ; ld hl, 0x158e        |
1597 11 fa 17     ; ld de, 0x17fa        |
159a 18 06        ; jr 0x15a2            |
159c 21 91 15     ; ld hl, 0x1591        |
159f 11 31 14     ; ld de, 0x1431        |
15a2 06 03        ; ld b, 0x3            |
15a4 1a           ; ld a, (de)           |
15a5 be           ; cp (hl)              |
15a6 c0           ; ret nz               |
15a7 23           ; inc hl               |
15a8 13           ; inc de               |
15a9 10 f9        ; djnz 0x15a4          |
15ab c9           ; ret                  |

;unknown IWS functions
15ac c5           ; push bc              |
15ad f5           ; push af              |
15ae cd 6a 15     ; call 0x156a          |
15b1 21 10 16     ; ld hl, 0x1610        |
15b4 0e 01        ; ld c, 0x1            |
15b6 cd 27 00     ; call 0x27            |
15b9 f1           ; pop af               |
15ba fe 04        ; cp 0x4               |
15bc 28 39        ; jr z, 0x15f7         |
15be fe 09        ; cp 0x9               |
15c0 fa c5 15     ; jp m, 0x15c5         |
15c3 3e 09        ; ld a, 0x9            |
15c5 21 11 16     ; ld hl, 0x1611        | error text "FORMAT ERR"
15c8 4e           ; ld c, (hl)           |
15c9 cb 79        ; bit 0x7, c           |
15cb 23           ; inc hl               |
15cc 28 fa        ; jr z, 0x15c8         |
15ce 3d           ; dec a                |
15cf 20 f7        ; jr nz, 0x15c8        |
15d1 cb b9        ; res 0x7, c           |
15d3 cd 27 00     ; call 0x27            | call DISPLAY
15d6 0e 04        ; ld c, 0x4            |
15d8 21 0c 16     ; ld hl, 0x160c        | error text "ON"
15db cd 27 00     ; call 0x27            | call DISPLAY
15de 0e 08        ; ld c, 0x8            |
15e0 e1           ; pop hl               |
15e1 23           ; inc hl               |
15e2 23           ; inc hl               |
15e3 cd 27 00     ; call 0x27            | call DISPLAY
15e6 cd 94 15     ; call 0x1594          |
15e9 ca 37 14     ; jp z, 0x1437         |
15ec cd 30 00     ; call 0x30            | call STOP
15ef 0e 01        ; ld c, 0x1            |
15f1 21 10 16     ; ld hl, 0x1610        |
15f4 c3 27 00     ; jp 0x27              |
15f7 2a 99 40     ; ld hl, (0x4099)      | get hl = THERE (addr for disk transfer)
15fa 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
15fd 4f           ; ld c, a              |
15fe cd 27 00     ; call 0x27            | call DISPLAY
1601 3e 04        ; ld a, 0x4            |
1603 18 c0        ; jr 0x15c5            |

;ASCI CHARS ERROR MESSAGES
1605 49           ; ld c, c              |
1606 4e           ; ld c, (hl)           |
1607 44           ; ld b, h              |
1608 45           ; ld b, l              |
1609 58           ; ld e, b              |
160a 20 20        ; jr nz, 0x162c        |
160c 20 4f        ; jr nz, 0x165d        |
160e 4e           ; ld c, (hl)           |
160f 20 0d        ; jr nz, 0x161e        |
1611 8a           ; adc a, d             |
1612 46           ; ld b, (hl)           |
1613 4f           ; ld c, a              |
1614 52           ; ld d, d              |
1615 4d           ; ld c, l              |
1616 41           ; ld b, c              |
1617 54           ; ld d, h              |
1618 20 45        ; jr nz, 0x165f        |
161a 52           ; ld d, d              |
161b 52           ; ld d, d              |
161c 02           ; ld (bc), a           |
161d 89           ; adc a, c             |
161e 57           ; ld d, a              |
161f 52           ; ld d, d              |
1620 49           ; ld c, c              |
1621 54           ; ld d, h              |
1622 45           ; ld b, l              |
1623 20 45        ; jr nz, 0x166a        |
1625 52           ; ld d, d              |
1626 52           ; ld d, d              |
1627 8a           ; adc a, d             |
1628 20 4e        ; jr nz, 0x1678        |
162a 4f           ; ld c, a              |
162b 54           ; ld d, h              |
162c 20 46        ; jr nz, 0x1674        |
162e 4f           ; ld c, a              |
162f 55           ; ld d, l              |
1630 4e           ; ld c, (hl)           |
1631 44           ; ld b, h              |
1632 87           ; add a, a             |
1633 4e           ; ld c, (hl)           |
1634 4f           ; ld c, a              |
1635 20 44        ; jr nz, 0x167b        |
1637 49           ; ld c, c              |
1638 53           ; ld d, e              |
1639 4b           ; ld c, e              |
163a 8a           ; adc a, d             |
163b 50           ; ld d, b              |
163c 41           ; ld b, c              |
163d 53           ; ld d, e              |
163e 53           ; ld d, e              |
163f 45           ; ld b, l              |
1640 44           ; ld b, h              |
1641 20 45        ; jr nz, 0x1688        |
1643 4f           ; ld c, a              |
1644 46           ; ld b, (hl)           |
1645 8d           ; adc a, l             |
1646 57           ; ld d, a              |
1647 52           ; ld d, d              |
1648 49           ; ld c, c              |
1649 54           ; ld d, h              |
164a 45           ; ld b, l              |
164b 20 50        ; jr nz, 0x169d        |
164d 52           ; ld d, d              |
164e 4f           ; ld c, a              |
164f 54           ; ld d, h              |
1650 45           ; ld b, l              |
1651 43           ; ld b, e              |
1652 54           ; ld d, h              |
1653 8d           ; adc a, l             |
1654 44           ; ld b, h              |
1655 41           ; ld b, c              |
1656 54           ; ld d, h              |
1657 41           ; ld b, c              |
1658 20 4c        ; jr nz, 0x16a6        |
165a 49           ; ld c, c              |
165b 4e           ; ld c, (hl)           |
165c 4b           ; ld c, e              |
165d 20 45        ; jr nz, 0x16a4        |
165f 52           ; ld d, d              |
1660 52           ; ld d, d              |
1661 89           ; adc a, c             |
1662 57           ; ld d, a              |
1663 45           ; ld b, l              |
1664 49           ; ld c, c              |
1665 52           ; ld d, d              |
1666 44           ; ld b, h              |
1667 20 45        ; jr nz, 0x16ae        |
1669 52           ; ld d, d              |
166a 52           ; ld d, d              |

;KEY ()?
166b e5           ; push hl              |
166c d5           ; push de              |
166d cd de 12     ; call 0x12de          |
1670 d1           ; pop de               |
1671 e1           ; pop hl               |
1672 c0           ; ret nz               |
1673 22 4a 42     ; ld (0x424a), hl      |
1676 dd 7e 0a     ; ld a, (ix + 0xa)     | get a = # of records HI
1679 dd b6 0b     ; or (ix + 0xb)        | get a = # of records LO
167c ca b1 17     ; jp z, 0x17b1         |
167f 3a 9c 40     ; ld a, (0x409c)       | get a = SNRT  (# recs to be transfd)
1682 b7           ; or a                 |
1683 28 f7        ; jr z, 0x167c         |
1685 4f           ; ld c, a              |
1686 06 00        ; ld b, 0x0            |
1688 09           ; add hl, bc           | checksum on FILE FD?
1689 22 20 42     ; ld (0x4220), hl      |
168c 47           ; ld b, a              |
168d 3e 9b        ; ld a, 0x9b           |
168f 2b           ; dec hl               |
1690 86           ; add a, (hl)          | checksum on filename (increment)
1691 10 fc        ; djnz 0x168f          |
1693 08           ; ex af, af'           |
1694 c5           ; push bc              |
1695 e1           ; pop hl               |
1696 19           ; add hl, de           |
1697 dd 7e 0c     ; ld a, (ix + 0xc)     | record len on INDEX FD (HI)
169a 95           ; sub l                |
169b 6f           ; ld l, a              |
169c dd 7e 0d     ; ld a, (ix + 0xd)     | record len on INDEX FD (LO)
169f 9c           ; sbc a, h             |
16a0 da b1 17     ; jp c, 0x17b1         |
16a3 08           ; ex af, af'           |
16a4 67           ; ld h, a              |
16a5 22 50 42     ; ld (0x4250), hl      |
16a8 08           ; ex af, af'           |
16a9 67           ; ld h, a              |
16aa b5           ; or l                 |
16ab 2b           ; dec hl               |
16ac 7c           ; ld a, h              |
16ad 21 74 17     ; ld hl, 0x1774        |
16b0 28 09        ; jr z, 0x16bb         |
16b2 b7           ; or a                 |
16b3 21 6e 17     ; ld hl, 0x176e        |
16b6 28 03        ; jr z, 0x16bb         |
16b8 21 69 17     ; ld hl, 0x1769        |
16bb e5           ; push hl              |
16bc fd e1        ; pop iy               |
16be 63           ; ld h, e              |
16bf 2e 0a        ; ld l, 0xa            |
16c1 22 52 42     ; ld (0x4252), hl      |
16c4 61           ; ld h, c              |
16c5 2d           ; dec l                |
16c6 22 4c 42     ; ld (0x424c), hl      |
16c9 7a           ; ld a, d              |
16ca b3           ; or e                 |
16cb 21 4c 17     ; ld hl, 0x174c        |
16ce 28 0b        ; jr z, 0x16db         |
16d0 1b           ; dec de               |
16d1 7a           ; ld a, d              |
16d2 b7           ; or a                 |
16d3 21 46 17     ; ld hl, 0x1746        |
16d6 28 03        ; jr z, 0x16db         |
16d8 21 41 17     ; ld hl, 0x1741        |
16db 22 4e 42     ; ld (0x424e), hl      |
16de 21 5f 17     ; ld hl, 0x175f        |
16e1 22 54 42     ; ld (0x4254), hl      |
16e4 cd c3 17     ; call 0x17c3          |
16e7 dd 6e 00     ; ld l, (ix + 0x0)     | hl = current record number
16ea dd 66 01     ; ld h, (ix + 0x1)     |
16ed 22 48 42     ; ld (0x4248), hl      |
16f0 1e ff        ; ld e, 0xff           |
16f2 3e 24        ; ld a, 0x24           |
16f4 32 9d 40     ; ld (0x409d), a       | set ERC   (disk error count) = a
16f7 cd 75 14     ; call 0x1475          |
16fa 20 2e        ; jr nz, 0x172a        |
16fc d5           ; push de              |
16fd 21 00 00     ; ld hl, 0x0           |
1700 54           ; ld d, h              |
1701 39           ; add hl, sp           |
1702 22 a2 40     ; ld (0x40a2), hl      | set TRKS  (track # for drive 2) = hl
1705 21 4a 42     ; ld hl, 0x424a        |
1708 f9           ; ld sp, hl            |
1709 e1           ; pop hl               |
170a c1           ; pop bc               |
170b d9           ; exx                  |
170c e1           ; pop hl               |
170d d1           ; pop de               |
170e 7a           ; ld a, d              |
170f 08           ; ex af, af'           |
1710 c1           ; pop bc               |
1711 ed 78        ; in a, (c)            |
1713 ed 78        ; in a, (c)            |
1715 f2 13 17     ; jp p, 0x1713         |
1718 0d           ; dec c                |
1719 ed 78        ; in a, (c)            |
171b fe 9b        ; cp 0x9b              |
171d 20 02        ; jr nz, 0x1721        |
171f 08           ; ex af, af'           |
1720 e9           ; jp (hl)              |
1721 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
1724 f9           ; ld sp, hl            |
1725 3e 02        ; ld a, 0x2            |
1727 d1           ; pop de               |
1728 18 04        ; jr 0x172e            |
172a 1e ff        ; ld e, 0xff           |
172c 3e 01        ; ld a, 0x1            |
172e 21 9d 40     ; ld hl, 0x409d        | hl = addr of ERC (disk error count)
1731 35           ; dec (hl)             |
1732 20 c3        ; jr nz, 0x16f7        |
1734 2a 48 42     ; ld hl, (0x4248)      |
1737 dd 75 00     ; ld (ix + 0x0), l     |
173a dd 74 01     ; ld (ix + 0x1), h     |
173d b7           ; or a                 |
173e c3 3f 11     ; jp 0x113f            |
1741 ed 50        ; in d, (c)            |
1743 82           ; add a, d             |
1744 10 fb        ; djnz 0x1741          |
1746 ed 50        ; in d, (c)            |
1748 82           ; add a, d             |
1749 10 fb        ; djnz 0x1746          |
174b 57           ; ld d, a              |
174c 43           ; ld b, e              |
174d d9           ; exx                  |
174e db 09        ; in a, (0x9)          |
1750 96           ; sub (hl)             |
1751 c0           ; ret nz               |
1752 23           ; inc hl               |
1753 10 f9        ; djnz 0x174e          |
1755 d9           ; exx                  | filename match on record
1756 db 09        ; in a, (0x9)          |
1758 fd e9        ; jp (iy)              |
175a ed 50        ; in d, (c)            |
175c 23           ; inc hl               |
175d 96           ; sub (hl)             |
175e 82           ; add a, d             |
175f 10 f9        ; djnz 0x175a          |
1761 47           ; ld b, a              |
1762 db 09        ; in a, (0x9)          |
1764 d9           ; exx                  |
1765 fd e9        ; jp (iy)              |
1767 ed 50        ; in d, (c)            |
1769 82           ; add a, d             |
176a 10 fb        ; djnz 0x1767          |
176c ed 50        ; in d, (c)            |
176e 82           ; add a, d             |
176f 10 fb        ; djnz 0x176c          |
1771 57           ; ld d, a              |
1772 db 09        ; in a, (0x9)          |
1774 92           ; sub d                |
1775 d9           ; exx                  |
1776 90           ; sub b                |
1777 20 a8        ; jr nz, 0x1721        |
1779 db 09        ; in a, (0x9)          | checksum good on data record
177b fe 10        ; cp 0x10              | end-of-record marker
177d 20 a2        ; jr nz, 0x1721        |
177f eb           ; ex de, hl            |
1780 2a 20 42     ; ld hl, (0x4220)      |
1783 ed 52        ; sbc hl, de           |
1785 2a a2 40     ; ld hl, (0x40a2)      | get hl = TRKS  (track # for drive 2)
1788 f9           ; ld sp, hl            |
1789 d1           ; pop de               |
178a c2 90 17     ; jp nz, 0x1790        |
178d 97           ; sub a                |
178e 18 30        ; jr 0x17c0            |
1790 1c           ; inc e                |
1791 dd 34 00     ; inc (ix + 0x0)       |
1794 c2 9a 17     ; jp nz, 0x179a        |
1797 dd 34 01     ; inc (ix + 0x1)       |
179a cd 51 13     ; call 0x1351          |
179d cc c7 17     ; call z, 0x17c7       |
17a0 2a 48 42     ; ld hl, (0x4248)      |
17a3 7d           ; ld a, l              |
17a4 dd be 00     ; cp (ix + 0x0)        |
17a7 c2 f2 16     ; jp nz, 0x16f2        |
17aa 7c           ; ld a, h              |
17ab dd 96 01     ; sub (ix + 0x1)       |
17ae c2 f2 16     ; jp nz, 0x16f2        |
17b1 dd 7e 0a     ; ld a, (ix + 0xa)     |
17b4 dd 77 00     ; ld (ix + 0x0), a     |
17b7 dd 7e 0b     ; ld a, (ix + 0xb)     |
17ba dd 77 01     ; ld (ix + 0x1), a     |
17bd 3e 04        ; ld a, 0x4            |
17bf b7           ; or a                 |
17c0 c3 3f 11     ; jp 0x113f            |
17c3 cd 51 13     ; call 0x1351          |
17c6 c0           ; ret nz               |
17c7 97           ; sub a                |
17c8 dd 77 00     ; ld (ix + 0x0), a     |
17cb dd 77 01     ; ld (ix + 0x1), a     |
17ce 1e ff        ; ld e, 0xff           |
17d0 c9           ; ret                  |
17d1 ff           ; rst 0x38             |
17d2 ff           ; rst 0x38             |
17d3 ff           ; rst 0x38             |
17d4 ff           ; rst 0x38             |
17d5 ff           ; rst 0x38             |
17d6 ff           ; rst 0x38             |
17d7 ff           ; rst 0x38             |
17d8 ff           ; rst 0x38             |
17d9 ff           ; rst 0x38             |
17da ff           ; rst 0x38             |
17db ff           ; rst 0x38             |
17dc ff           ; rst 0x38             |
17dd ff           ; rst 0x38             |
17de ff           ; rst 0x38             |
17df ff           ; rst 0x38             |
17e0 ff           ; rst 0x38             |
17e1 ff           ; rst 0x38             |
17e2 ff           ; rst 0x38             |
17e3 ff           ; rst 0x38             |
17e4 ff           ; rst 0x38             |
17e5 ff           ; rst 0x38             |
17e6 ff           ; rst 0x38             |
17e7 ff           ; rst 0x38             |
17e8 ff           ; rst 0x38             |
17e9 ff           ; rst 0x38             |
17ea ff           ; rst 0x38             |
17eb ff           ; rst 0x38             |
17ec ff           ; rst 0x38             |
17ed ff           ; rst 0x38             |
17ee ff           ; rst 0x38             |
17ef ff           ; rst 0x38             |
17f0 ff           ; rst 0x38             |
17f1 ff           ; rst 0x38             |
17f2 ff           ; rst 0x38             |
17f3 ff           ; rst 0x38             |
17f4 ff           ; rst 0x38             |
17f5 ff           ; rst 0x38             |
17f6 ff           ; rst 0x38             |
17f7 ff           ; rst 0x38             |
17f8 ff           ; rst 0x38             |
17f9 ff           ; rst 0x38             |
17fa ff           ; rst 0x38             |
17fb ff           ; rst 0x38             |
17fc ff           ; rst 0x38             |
17fd ff           ; rst 0x38             |
17fe ff           ; rst 0x38             |
17ff ff           ; rst 0x38             |

;PL/1 jump vectors
1800 c3 ce 1c     ; jp 0x1cce            | PL/1 NORMY (ROS p.19)
1803 c3 78 18     ; jp 0x1878            | PL/1 GIN (ROS p.19)
1806 c3 53 1f     ; jp 0x1f53            | PL/1 CLEAR (ROS p.19)
1809 c3 7c 18     ; jp 0x187c            | PL/1 START (ROS p.19)

;PL/1 instruction vectors
180c 9d           ; sbc a, l             |
180d 18 fb        ; jr 0x180a            |
180f 1c           ; inc e                |
1810 cb 1d        ; rr l                 |
1812 ac           ; xor h                |
1813 18 15        ; jr 0x182a            |
1815 1d           ; dec e                |
1816 78           ; ld a, b              |
1817 1d           ; dec e                |
1818 92           ; sub d                |
1819 19           ; add hl, de           |
181a 37           ; scf                  |
181b 1c           ; inc e                |
181c dd 1b        ; dec de               |
181e 12           ; ld (de), a           |
181f 1c           ; inc e                |
1820 a5           ; and l                |
1821 18 4d        ; jr 0x1870            |
1823 1c           ; inc e                |
1824 b4           ; or h                 |
1825 18 be        ; jr 0x17e5            |
1827 1d           ; dec e                |
1828 bb           ; cp e                 |
1829 18 b3        ; jr 0x17de            |
182b 1e c3        ; ld e, 0xc3           |
182d 18 24        ; jr 0x1853            |
182f 1e 2c        ; ld e, 0x2c           |
1831 1b           ; dec de               |
1832 38 1b        ; jr c, 0x184f         |
1834 44           ; ld b, h              |
1835 1b           ; dec de               |
1836 cc 18 e8     ; call z, 0xe818       |
1839 1a           ; ld a, (de)           |
183a d7           ; rst 0x10             |
183b 1b           ; dec de               |
183c f1           ; pop af               |
183d 1a           ; ld a, (de)           |
183e 20 1b        ; jr nz, 0x185b        |
1840 f5           ; push af              |
1841 18 18        ; jr 0x185b            |
1843 00           ; nop                  |
1844 34           ; inc (hl)             |
1845 1d           ; dec e                |
1846 38 1d        ; jr c, 0x1865         |
1848 fb           ; ei                   |
1849 18 38        ; jr 0x1883            |
184b 19           ; add hl, de           |
184c 61           ; ld h, c              |
184d 1d           ; dec e                |
184e 42           ; ld b, d              |
184f 1d           ; dec e                |
1850 c9           ; ret                  |
1851 1b           ; dec de               |
1852 4a           ; ld c, d              |
1853 19           ; add hl, de           |
1854 39           ; add hl, sp           |
1855 19           ; add hl, de           |
1856 50           ; ld d, b              |
1857 19           ; add hl, de           |
1858 6b           ; ld l, e              |
1859 19           ; add hl, de           |
185a 58           ; ld e, b              |
185b 19           ; add hl, de           |
185c 73           ; ld (hl), e           |
185d 19           ; add hl, de           |
185e db 19        ; in a, (0x19)         |
1860 3f           ; ccf                  |
1861 19           ; add hl, de           |
1862 77           ; ld (hl), a           |
1863 1b           ; dec de               |
1864 af           ; xor a                |
1865 1b           ; dec de               |
1866 bc           ; cp h                 |
1867 1b           ; dec de               |
1868 4d           ; ld c, l              |
1869 1b           ; dec de               |
186a d0           ; ret nc               |
186b 1b           ; dec de               |
186c db 1f        ; in a, (0x1f)         |
186e b9           ; cp c                 |
186f 19           ; add hl, de           |
1870 ea 18 df     ; jp pe, 0xdf18        |
1873 18 b0        ; jr 0x1825            |
1875 1f           ; rra                  |
1876 f2 1f e1     ; jp p, 0xe11f         |

;return from subrouine?
1878 e1           ; pop hl               |
1879 c3 7f 18     ; jp 0x187f            |

;run microcode program
187c 2a fe 40     ; ld hl, (0x40fe)      | Interpretive Program Counter
187f 7e           ; ld a, (hl)           | get instruction (or data)
1880 23           ; inc hl               |
1881 87           ; add a, a             |
1882 fa 95 18     ; jp m, 0x1895         | jump if a > 63 (is address?)
1885 da 95 18     ; jp c, 0x1895         |
1888 22 fe 40     ; ld (0x40fe), hl      |
188b c6 0c        ; add a, 0xc           |
188d 6f           ; ld l, a              |
188e 26 18        ; ld h, 0x18           |
1890 7e           ; ld a, (hl)           | a = (0x18xx) xx = 2*a + 12; ex. instr 0xa is at 0x1820 -> jp 0x18a5
1891 23           ; inc hl               |
1892 66           ; ld h, (hl)           |
1893 6f           ; ld l, a              |
1894 e9           ; jp (hl)              | jump to instruction code
1895 1f           ; rra                  | get original value of a
1896 5e           ; ld e, (hl)           | get next byte of address
1897 23           ; inc hl               |
1898 57           ; ld d, a              |
1899 d5           ; push de              | push address on stack
189a c3 7f 18     ; jp 0x187f            | get next instr or address
189d e1           ; pop hl               | INST 00 - stack number from address on stack
189e 4e           ; ld c, (hl)           |
189f 23           ; inc hl               |
18a0 46           ; ld b, (hl)           |
18a1 c5           ; push bc              |
18a2 c3 7c 18     ; jp 0x187c            | get next instr or address
18a5 e1           ; pop hl               | INST 0A - add
18a6 d1           ; pop de               |
18a7 19           ; add hl, de           |
18a8 e5           ; push hl              |
18a9 c3 7c 18     ; jp 0x187c            | get next instr or address
18ac d1           ; pop de               | INST 03 - store binary number at stack address
18ad e1           ; pop hl               |
18ae 73           ; ld (hl), e           |
18af 23           ; inc hl               |
18b0 72           ; ld (hl), d           |
18b1 c3 7c 18     ; jp 0x187c            | get next instr or address
18b4 e1           ; pop hl               | INST 0C - replace binary number with negation
18b5 cd 15 00     ; call 0x15            | call NhL routine
18b8 c3 a8 18     ; jp 0x18a8            |
18bb d1           ; pop de               | INST 0E - multiply binary
18bc c1           ; pop bc               |
18bd cd 0c 00     ; call 0xc             | call MUL routine
18c0 c3 a8 18     ; jp 0x18a8            |
18c3 d1           ; pop de               | INST 10 - divide binary
18c4 e1           ; pop hl               |
18c5 cd 0f 00     ; call 0xf             | call DIV routine
18c8 d5           ; push de              |
18c9 c3 7c 18     ; jp 0x187c            | get next instr or address
18cc cd 2b 1d     ; call 0x1d2b          | INST 15 - PUT data to specified device driver
18cf 41           ; ld b, c              |
18d0 cd 2b 1d     ; call 0x1d2b          | increment IPC
18d3 21 fb 40     ; ld hl, 0x40fb        | Output routine for PUT
18d6 36 c3        ; ld (hl), 0xc3        |
18d8 23           ; inc hl               |
18d9 71           ; ld (hl), c           |
18da 23           ; inc hl               |
18db 70           ; ld (hl), b           |
18dc c3 7c 18     ; jp 0x187c            | get next instr or address
18df 2a fe 40     ; ld hl, (0x40fe)      | INST 33 - byte 2 and 3 is binary number, stacked
18e2 46           ; ld b, (hl)           |
18e3 23           ; inc hl               |
18e4 4e           ; ld c, (hl)           |
18e5 c5           ; push bc              |
18e6 23           ; inc hl               |
18e7 c3 7f 18     ; jp 0x187f            |
18ea 2a fe 40     ; ld hl, (0x40fe)      | INST 32 - byte 2 is binary number, stacked
18ed 4e           ; ld c, (hl)           |
18ee 23           ; inc hl               |
18ef 06 00        ; ld b, 0x0            |
18f1 c5           ; push bc              |
18f2 c3 7f 18     ; jp 0x187f            |
18f5 cd 03 00     ; call 0x3             | INST 1A - Convert from decimal to character
18f8 c3 7c 18     ; jp 0x187c            | get next instr or address
18fb e1           ; pop hl               | INST 1E - Call to address on top of the stack
18fc 7e           ; ld a, (hl)           |
18fd 23           ; inc hl               |
18fe 23           ; inc hl               |
18ff fe 04        ; cp 0x4               |
1901 d2 fc 18     ; jp nc, 0x18fc        |
1904 2b           ; dec hl               |
1905 2b           ; dec hl               |
1906 22 00 42     ; ld (0x4200), hl      |
1909 d1           ; pop de               |
190a 14           ; inc d                |
190b 15           ; dec d                |
190c ca 1b 19     ; jp z, 0x191b         |
190f 2b           ; dec hl               |
1910 4e           ; ld c, (hl)           |
1911 2b           ; dec hl               |
1912 46           ; ld b, (hl)           |
1913 7b           ; ld a, e              |
1914 02           ; ld (bc), a           |
1915 7a           ; ld a, d              |
1916 03           ; inc bc               |
1917 02           ; ld (bc), a           |
1918 c3 09 19     ; jp 0x1909            |
191b 2a 00 42     ; ld hl, (0x4200)      |
191e 7e           ; ld a, (hl)           |
191f 23           ; inc hl               |
1920 eb           ; ex de, hl            |
1921 2a fe 40     ; ld hl, (0x40fe)      |
1924 eb           ; ex de, hl            |
1925 01 78 18     ; ld bc, 0x1878        |
1928 d5           ; push de              |
1929 c5           ; push bc              |
192a b7           ; or a                 |
192b c2 7f 18     ; jp nz, 0x187f        |
192e e9           ; jp (hl)              |
192f 21 ff 42     ; ld hl, 0x42ff        |
1932 2d           ; dec l                |
1933 77           ; ld (hl), a           |
1934 0d           ; dec c                |
1935 c2 32 19     ; jp nz, 0x1932        |
1938 c9           ; ret                  | INST 1F - return from subroutine
1939 cd 21 00     ; call 0x21            | INST 24 - Get decimal number from input
193c c3 7c 18     ; jp 0x187c            | get next instr or address
193f c1           ; pop bc               | INST 2A - Output character N times
1940 d1           ; pop de               |
1941 7b           ; ld a, e              |
1942 41           ; ld b, c              |
1943 cd 2f 19     ; call 0x192f          |
1946 48           ; ld c, b              |
1947 c3 6d 19     ; jp 0x196d            |
194a cd 24 00     ; call 0x24            | INST 23 - Get new line of keyboard input
194d c3 7c 18     ; jp 0x187c            | get next instr or address
1950 c1           ; pop bc               | INST 25 - Get character string from input
1951 e1           ; pop hl               |
1952 cd 1e 00     ; call 0x1e            |
1955 c3 7c 18     ; jp 0x187c            | get next instr or address
1958 cd 03 00     ; call 0x3             | INST 27 - Put decimal number
195b 3e 20        ; ld a, 0x20           |
195d 0e 10        ; ld c, 0x10           |
195f cd 2f 19     ; call 0x192f          |
1962 c1           ; pop bc               |
1963 3e 10        ; ld a, 0x10           |
1965 91           ; sub c                |
1966 c5           ; push bc              |
1967 4f           ; ld c, a              |
1968 cd fb 40     ; call 0x40fb          |
196b c1           ; pop bc               | INST 26 - Put character string
196c e1           ; pop hl               |
196d cd fb 40     ; call 0x40fb          |
1970 c3 7c 18     ; jp 0x187c            | get next instr or address
1973 d1           ; pop de               | INST 28 - Put Edit character string
1974 c1           ; pop bc               |
1975 e1           ; pop hl               |
1976 e5           ; push hl              |
1977 d5           ; push de              |
1978 cd e7 1f     ; call 0x1fe7          |
197b 7b           ; ld a, e              |
197c 90           ; sub b                |
197d da 6b 19     ; jp c, 0x196b         |
1980 e1           ; pop hl               |
1981 e1           ; pop hl               |
1982 f5           ; push af              |
1983 48           ; ld c, b              |
1984 cd fb 40     ; call 0x40fb          |
1987 c1           ; pop bc               |
1988 48           ; ld c, b              |
1989 3e 20        ; ld a, 0x20           |
198b cd 2f 19     ; call 0x192f          |
198e 48           ; ld c, b              |
198f c3 6d 19     ; jp 0x196d            |
1992 c1           ; pop bc               | INST 06 - store a string of bytes
1993 e1           ; pop hl               |
1994 d1           ; pop de               |
1995 03           ; inc bc               |
1996 13           ; inc de               |
1997 1b           ; dec de               |
1998 7a           ; ld a, d              |
1999 b3           ; or e                 |
199a ca b5 19     ; jp z, 0x19b5         |
199d 0b           ; dec bc               |
199e 78           ; ld a, b              |
199f b1           ; or c                 |
19a0 7e           ; ld a, (hl)           |
19a1 23           ; inc hl               |
19a2 e3           ; ex (sp), hl          |
19a3 ca ac 19     ; jp z, 0x19ac         |
19a6 77           ; ld (hl), a           |
19a7 23           ; inc hl               |
19a8 e3           ; ex (sp), hl          |
19a9 c3 97 19     ; jp 0x1997            |
19ac 36 00        ; ld (hl), 0x0         |
19ae 23           ; inc hl               |
19af 1b           ; dec de               |
19b0 7a           ; ld a, d              |
19b1 b3           ; or e                 |
19b2 c2 ac 19     ; jp nz, 0x19ac        |
19b5 e1           ; pop hl               |
19b6 c3 7c 18     ; jp 0x187c            | get next instr or address
19b9 c1           ; pop bc               | INST 31 - store string (no padding)
19ba 79           ; ld a, c              |
19bb e1           ; pop hl               |
19bc c1           ; pop bc               |
19bd 47           ; ld b, a              |
19be d1           ; pop de               |
19bf 0c           ; inc c                |
19c0 04           ; inc b                |
19c1 0d           ; dec c                |
19c2 ca d4 19     ; jp z, 0x19d4         |
19c5 05           ; dec b                |
19c6 ca d4 19     ; jp z, 0x19d4         |
19c9 7e           ; ld a, (hl)           |
19ca b7           ; or a                 |
19cb ca d4 19     ; jp z, 0x19d4         |
19ce 23           ; inc hl               |
19cf 12           ; ld (de), a           |
19d0 13           ; inc de               |
19d1 c3 c1 19     ; jp 0x19c1            |
19d4 06 00        ; ld b, 0x0            |
19d6 d5           ; push de              |
19d7 c5           ; push bc              |
19d8 c3 7c 18     ; jp 0x187c            | get next instr or address
19db c1           ; pop bc               | INST 29 - Put Edit decimal number
19dc 79           ; ld a, c              |
19dd c1           ; pop bc               |
19de d1           ; pop de               |
19df e1           ; pop hl               |
19e0 57           ; ld d, a              |
19e1 14           ; inc d                |
19e2 1c           ; inc e                |
19e3 7e           ; ld a, (hl)           |
19e4 32 1f 42     ; ld (0x421f), a       |
19e7 fe 2d        ; cp 0x2d              |
19e9 ca f1 19     ; jp z, 0x19f1         |
19ec fe 30        ; cp 0x30              |
19ee c2 f3 19     ; jp nz, 0x19f3        |
19f1 23           ; inc hl               |
19f2 1d           ; dec e                |
19f3 c5           ; push bc              |
19f4 01 ff 00     ; ld bc, 0xff          |
19f7 ca 1e 1a     ; jp z, 0x1a1e         |
19fa 7b           ; ld a, e              |
19fb d6 05        ; sub 0x5              |
19fd da 10 1a     ; jp c, 0x1a10         |
1a00 e5           ; push hl              |
1a01 85           ; add a, l             |
1a02 6f           ; ld l, a              |
1a03 d2 07 1a     ; jp nc, 0x1a07        |
1a06 24           ; inc h                |
1a07 7e           ; ld a, (hl)           |
1a08 e1           ; pop hl               |
1a09 fe 45        ; cp 0x45              |
1a0b c2 10 1a     ; jp nz, 0x1a10        |
1a0e 1e 01        ; ld e, 0x1            |
1a10 0c           ; inc c                |
1a11 1d           ; dec e                |
1a12 ca 1e 1a     ; jp z, 0x1a1e         |
1a15 7e           ; ld a, (hl)           |
1a16 23           ; inc hl               |
1a17 fe 2e        ; cp 0x2e              |
1a19 c2 10 1a     ; jp nz, 0x1a10        |
1a1c 1d           ; dec e                |
1a1d 2b           ; dec hl               |
1a1e e3           ; ex (sp), hl          |
1a1f 04           ; inc b                |
1a20 15           ; dec d                |
1a21 ca 2d 1a     ; jp z, 0x1a2d         |
1a24 7e           ; ld a, (hl)           |
1a25 23           ; inc hl               |
1a26 fe 56        ; cp 0x56              |
1a28 c2 1f 1a     ; jp nz, 0x1a1f        |
1a2b 15           ; dec d                |
1a2c 2b           ; dec hl               |
1a2d eb           ; ex de, hl            |
1a2e e3           ; ex (sp), hl          |
1a2f d5           ; push de              |
1a30 e5           ; push hl              |
1a31 e5           ; push hl              |
1a32 21 41 42     ; ld hl, 0x4241        |
1a35 36 00        ; ld (hl), 0x0         |
1a37 2b           ; dec hl               |
1a38 1b           ; dec de               |
1a39 05           ; dec b                |
1a3a ca ad 1a     ; jp z, 0x1aad         |
1a3d 0c           ; inc c                |
1a3e 0d           ; dec c                |
1a3f ca 6f 1a     ; jp z, 0x1a6f         |
1a42 1a           ; ld a, (de)           |
1a43 1b           ; dec de               |
1a44 fe 2e        ; cp 0x2e              |
1a46 ca 58 1a     ; jp z, 0x1a58         |
1a49 fe 2c        ; cp 0x2c              |
1a4b ca 58 1a     ; jp z, 0x1a58         |
1a4e fe 20        ; cp 0x20              |
1a50 ca 58 1a     ; jp z, 0x1a58         |
1a53 e3           ; ex (sp), hl          |
1a54 0d           ; dec c                |
1a55 2b           ; dec hl               |
1a56 7e           ; ld a, (hl)           |
1a57 e3           ; ex (sp), hl          |
1a58 77           ; ld (hl), a           |
1a59 2b           ; dec hl               |
1a5a c3 39 1a     ; jp 0x1a39            |
1a5d 1a           ; ld a, (de)           |
1a5e e6 fd        ; and 0xfd             |
1a60 fe 2c        ; cp 0x2c              |
1a62 1a           ; ld a, (de)           |
1a63 c0           ; ret nz               |
1a64 1b           ; dec de               |
1a65 1a           ; ld a, (de)           |
1a66 13           ; inc de               |
1a67 fe 30        ; cp 0x30              |
1a69 d8           ; ret c                |
1a6a fe 5a        ; cp 0x5a              |
1a6c c8           ; ret z                |
1a6d 1a           ; ld a, (de)           |
1a6e c9           ; ret                  |
1a6f cd 5d 1a     ; call 0x1a5d          |
1a72 fe 24        ; cp 0x24              |
1a74 ca a6 1a     ; jp z, 0x1aa6         |
1a77 fe 2d        ; cp 0x2d              |
1a79 c2 86 1a     ; jp nz, 0x1a86        |
1a7c 3a 1f 42     ; ld a, (0x421f)       |
1a7f fe 2d        ; cp 0x2d              |
1a81 ca a6 1a     ; jp z, 0x1aa6         |
1a84 3e 20        ; ld a, 0x20           |
1a86 fe 30        ; cp 0x30              |
1a88 ca 6f 1a     ; jp z, 0x1a6f         |
1a8b cd 5d 1a     ; call 0x1a5d          |
1a8e fe 2d        ; cp 0x2d              |
1a90 da a1 1a     ; jp c, 0x1aa1         |
1a93 fe 2e        ; cp 0x2e              |
1a95 ca a1 1a     ; jp z, 0x1aa1         |
1a98 fe 39        ; cp 0x39              |
1a9a 3e 30        ; ld a, 0x30           |
1a9c ca a6 1a     ; jp z, 0x1aa6         |
1a9f 3e 20        ; ld a, 0x20           |
1aa1 fe 24        ; cp 0x24              |
1aa3 ca 9f 1a     ; jp z, 0x1a9f         |
1aa6 1b           ; dec de               |
1aa7 77           ; ld (hl), a           |
1aa8 2b           ; dec hl               |
1aa9 05           ; dec b                |
1aaa c2 86 1a     ; jp nz, 0x1a86        |
1aad f1           ; pop af               |
1aae c1           ; pop bc               |
1aaf d1           ; pop de               |
1ab0 e3           ; ex (sp), hl          |
1ab1 24           ; inc h                |
1ab2 c5           ; push bc              |
1ab3 01 40 42     ; ld bc, 0x4240        |
1ab6 25           ; dec h                |
1ab7 ca df 1a     ; jp z, 0x1adf         |
1aba 2c           ; inc l                |
1abb 2d           ; dec l                |
1abc ca d0 1a     ; jp z, 0x1ad0         |
1abf 13           ; inc de               |
1ac0 1a           ; ld a, (de)           |
1ac1 fe 39        ; cp 0x39              |
1ac3 c2 cb 1a     ; jp nz, 0x1acb        |
1ac6 e3           ; ex (sp), hl          |
1ac7 23           ; inc hl               |
1ac8 7e           ; ld a, (hl)           |
1ac9 e3           ; ex (sp), hl          |
1aca 2d           ; dec l                |
1acb 03           ; inc bc               |
1acc 02           ; ld (bc), a           |
1acd c3 b6 1a     ; jp 0x1ab6            |
1ad0 13           ; inc de               |
1ad1 1a           ; ld a, (de)           |
1ad2 fe 39        ; cp 0x39              |
1ad4 c2 d9 1a     ; jp nz, 0x1ad9        |
1ad7 3e 30        ; ld a, 0x30           |
1ad9 03           ; inc bc               |
1ada 02           ; ld (bc), a           |
1adb 25           ; dec h                |
1adc c2 d0 1a     ; jp nz, 0x1ad0        |
1adf f1           ; pop af               |
1ae0 e1           ; pop hl               |
1ae1 79           ; ld a, c              |
1ae2 95           ; sub l                |
1ae3 23           ; inc hl               |
1ae4 4f           ; ld c, a              |
1ae5 c3 6d 19     ; jp 0x196d            |
1ae8 c1           ; pop bc               | INST 16 - Convert from character to binary
1ae9 e1           ; pop hl               |
1aea cd 2d 00     ; call 0x2d            | call CARB (ch to binary)
1aed d5           ; push de              |
1aee c3 7c 18     ; jp 0x187c            | get next instr or address
1af1 e1           ; pop hl               | INST 18 - Convert from binary to decimal
1af2 22 64 42     ; ld (0x4264), hl      |
1af5 e1           ; pop hl               |
1af6 22 66 42     ; ld (0x4266), hl      |
1af9 e1           ; pop hl               |
1afa 22 68 42     ; ld (0x4268), hl      |
1afd e1           ; pop hl               |
1afe 22 6a 42     ; ld (0x426a), hl      |
1b01 e1           ; pop hl               |
1b02 11 32 42     ; ld de, 0x4232        |
1b05 cd 12 00     ; call 0x12            | call BICHAR
1b08 d5           ; push de              |
1b09 c5           ; push bc              |
1b0a cd 06 00     ; call 0x6             | call TOSTR
1b0d 2a 6a 42     ; ld hl, (0x426a)      |
1b10 e5           ; push hl              |
1b11 2a 68 42     ; ld hl, (0x4268)      |
1b14 e5           ; push hl              |
1b15 2a 66 42     ; ld hl, (0x4266)      |
1b18 e5           ; push hl              |
1b19 2a 64 42     ; ld hl, (0x4264)      |
1b1c e5           ; push hl              |
1b1d c3 7c 18     ; jp 0x187c            | get next instr or address
1b20 e1           ; pop hl               | INST 19 - Convert from binary to character
1b21 11 32 42     ; ld de, 0x4232        |
1b24 cd 12 00     ; call 0x12            | call TODEC
1b27 d5           ; push de              |
1b28 c5           ; push bc              |
1b29 c3 7c 18     ; jp 0x187c            | get next instr or address
1b2c e1           ; pop hl               | INST 12 - And binary
1b2d d1           ; pop de               |
1b2e 7d           ; ld a, l              |
1b2f a3           ; and e                |
1b30 6f           ; ld l, a              |
1b31 7c           ; ld a, h              |
1b32 a2           ; and d                |
1b33 67           ; ld h, a              |
1b34 e5           ; push hl              |
1b35 c3 7c 18     ; jp 0x187c            | get next instr or address
1b38 e1           ; pop hl               | INST 13 - Or binary
1b39 d1           ; pop de               |
1b3a 7d           ; ld a, l              |
1b3b b3           ; or e                 |
1b3c 6f           ; ld l, a              |
1b3d 7c           ; ld a, h              |
1b3e b2           ; or d                 |
1b3f 67           ; ld h, a              |
1b40 e5           ; push hl              |
1b41 c3 7c 18     ; jp 0x187c            | get next instr or address
1b44 e1           ; pop hl               | INST 14 - Ones complement binary
1b45 cd 15 00     ; call 0x15            | call NHL (negate binary in hl)
1b48 2b           ; dec hl               |
1b49 e5           ; push hl              |
1b4a c3 7c 18     ; jp 0x187c            | get next instr or address
1b4d d1           ; pop de               | INST 2E - Read key
1b4e e1           ; pop hl               |
1b4f 22 14 42     ; ld (0x4214), hl      |
1b52 e1           ; pop hl               |
1b53 22 16 42     ; ld (0x4216), hl      |
1b56 c1           ; pop bc               |
1b57 e1           ; pop hl               |
1b58 e3           ; ex (sp), hl          |
1b59 7d           ; ld a, l              |
1b5a e1           ; pop hl               |
1b5b cd 09 08     ; call 0x809           | call KEY[SEARCH]
1b5e 2a fe 40     ; ld hl, (0x40fe)      |
1b61 5e           ; ld e, (hl)           |
1b62 23           ; inc hl               |
1b63 22 fe 40     ; ld (0x40fe), hl      |
1b66 c2 81 1b     ; jp nz, 0x1b81        |
1b69 7b           ; ld a, e              |
1b6a 2a 16 42     ; ld hl, (0x4216)      |
1b6d eb           ; ex de, hl            |
1b6e 2a 14 42     ; ld hl, (0x4214)      |
1b71 cd 00 08     ; call 0x800           | call READ
1b74 c3 81 1b     ; jp 0x1b81            |
1b77 cd 2b 1d     ; call 0x1d2b          | INST 2B - Read from disk
1b7a 79           ; ld a, c              |
1b7b e1           ; pop hl               |
1b7c d1           ; pop de               |
1b7d c1           ; pop bc               |
1b7e cd 00 08     ; call 0x800           | call READ

;return from file operations
1b81 32 f5 40     ; ld (0x40f5), a       | set ONCODE = a
1b84 ca 97 1b     ; jp z, 0x1b97         |
1b87 fe 06        ; cp 0x6               |
1b89 ca a9 1b     ; jp z, 0x1ba9         |
1b8c 2a f7 40     ; ld hl, (0x40f7)      |
1b8f 24           ; inc h                |
1b90 25           ; dec h                |
1b91 ca a3 1b     ; jp z, 0x1ba3         |
1b94 22 fe 40     ; ld (0x40fe), hl      |
1b97 21 00 00     ; ld hl, 0x0           |
1b9a 22 f9 40     ; ld (0x40f9), hl      |
1b9d 22 f7 40     ; ld (0x40f7), hl      |
1ba0 c3 7c 18     ; jp 0x187c            | run loaded program!

;misc PL/1 code
1ba3 cd 18 08     ; call 0x818           | call (error) REPORT
1ba6 c3 97 1b     ; jp 0x1b97            |
1ba9 2a f9 40     ; ld hl, (0x40f9)      |
1bac c3 8f 1b     ; jp 0x1b8f            |
1baf cd 2b 1d     ; call 0x1d2b          | INST 2C - write on disk
1bb2 79           ; ld a, c              |
1bb3 e1           ; pop hl               |
1bb4 d1           ; pop de               |
1bb5 c1           ; pop bc               |
1bb6 cd 03 08     ; call 0x803           | call WRITE
1bb9 c3 81 1b     ; jp 0x1b81            |
1bbc cd 2b 1d     ; call 0x1d2b          | INST 2D - rewrite on disk
1bbf 79           ; ld a, c              |
1bc0 e1           ; pop hl               |
1bc1 d1           ; pop de               |
1bc2 c1           ; pop bc               |
1bc3 cd 06 08     ; call 0x806           | call REWRITE
1bc6 c3 81 1b     ; jp 0x1b81            |
1bc9 e1           ; pop hl               | INST 22 - open file
1bca cd 0c 08     ; call 0x80c           | call OPEN
1bcd c3 81 1b     ; jp 0x1b81            |
1bd0 e1           ; pop hl               | INST 2F - file description on top of stack
1bd1 cd 12 08     ; call 0x812           |
1bd4 c3 81 1b     ; jp 0x1b81            |
1bd7 cd 06 00     ; call 0x6             | INST 17 - Convert from character to decimal
1bda c3 7c 18     ; jp 0x187c            | get next instr or address
1bdd cd fb 1d     ; call 0x1dfb          | INST 08 - compare decimal
1be0 e5           ; push hl              |
1be1 1a           ; ld a, (de)           |
1be2 0e 08        ; ld c, 0x8            |
1be4 b6           ; or (hl)              |
1be5 f2 e9 1b     ; jp p, 0x1be9         |
1be8 eb           ; ex de, hl            |
1be9 1a           ; ld a, (de)           |
1bea be           ; cp (hl)              |
1beb c2 f4 1b     ; jp nz, 0x1bf4        |
1bee 2b           ; dec hl               |
1bef 1b           ; dec de               |
1bf0 0d           ; dec c                |
1bf1 c2 e9 1b     ; jp nz, 0x1be9        |
1bf4 e1           ; pop hl               |
1bf5 23           ; inc hl               |
1bf6 f9           ; ld sp, hl            |
1bf7 3e 02        ; ld a, 0x2            |
1bf9 ca 02 1c     ; jp z, 0x1c02         |
1bfc 3d           ; dec a                |
1bfd d2 02 1c     ; jp nc, 0x1c02        |
1c00 07           ; rlca                 |
1c01 07           ; rlca                 |
1c02 2a fe 40     ; ld hl, (0x40fe)      |
1c05 a6           ; and (hl)             |
1c06 01 00 00     ; ld bc, 0x0           |
1c09 23           ; inc hl               |
1c0a ca 0e 1c     ; jp z, 0x1c0e         |
1c0d 0b           ; dec bc               |
1c0e c5           ; push bc              |
1c0f c3 7f 18     ; jp 0x187f            |
1c12 c1           ; pop bc               | INST 09 - compare character strings
1c13 79           ; ld a, c              |
1c14 d1           ; pop de               |
1c15 c1           ; pop bc               |
1c16 e1           ; pop hl               |
1c17 47           ; ld b, a              |
1c18 04           ; inc b                |
1c19 0c           ; inc c                |
1c1a 1a           ; ld a, (de)           |
1c1b 05           ; dec b                |
1c1c c2 21 1c     ; jp nz, 0x1c21        |
1c1f 04           ; inc b                |
1c20 97           ; sub a                |
1c21 0d           ; dec c                |
1c22 c2 2e 1c     ; jp nz, 0x1c2e        |
1c25 0c           ; inc c                |
1c26 21 07 1c     ; ld hl, 0x1c07        |
1c29 05           ; dec b                |
1c2a ca f7 1b     ; jp z, 0x1bf7         |
1c2d 04           ; inc b                |
1c2e be           ; cp (hl)              |
1c2f c2 f7 1b     ; jp nz, 0x1bf7        |
1c32 23           ; inc hl               |
1c33 13           ; inc de               |
1c34 c3 1a 1c     ; jp 0x1c1a            |
1c37 d1           ; pop de               | INST 07 - compare binary numbers
1c38 e1           ; pop hl               |
1c39 7a           ; ld a, d              |
1c3a ac           ; xor h                |
1c3b fa 48 1c     ; jp m, 0x1c48         |
1c3e 7a           ; ld a, d              |
1c3f bc           ; cp h                 |
1c40 c2 f7 1b     ; jp nz, 0x1bf7        |
1c43 7b           ; ld a, e              |
1c44 bd           ; cp l                 |
1c45 c3 f7 1b     ; jp 0x1bf7            |
1c48 7c           ; ld a, h              |
1c49 ba           ; cp d                 |
1c4a c3 f7 1b     ; jp 0x1bf7            |
1c4d cd fb 1d     ; call 0x1dfb          | INST 0B - add decimal
1c50 47           ; ld b, a              |
1c51 ae           ; xor (hl)             |
1c52 4f           ; ld c, a              |
1c53 e6 80        ; and 0x80             |
1c55 80           ; add a, b             |
1c56 96           ; sub (hl)             |
1c57 da 60 1c     ; jp c, 0x1c60         |
1c5a ca 9a 1c     ; jp z, 0x1c9a         |
1c5d 2f           ; cpl                  |
1c5e 3c           ; inc a                |
1c5f eb           ; ex de, hl            |
1c60 e5           ; push hl              |
1c61 61           ; ld h, c              |
1c62 3d           ; dec a                |
1c63 47           ; ld b, a              |
1c64 c6 07        ; add a, 0x7           |
1c66 d2 c0 1c     ; jp nc, 0x1cc0        |
1c69 4f           ; ld c, a              |
1c6a 0c           ; inc c                |
1c6b 2f           ; cpl                  |
1c6c 83           ; add a, e             |
1c6d 5f           ; ld e, a              |
1c6e 7d           ; ld a, l              |
1c6f d6 07        ; sub 0x7              |
1c71 6f           ; ld l, a              |
1c72 24           ; inc h                |
1c73 25           ; dec h                |
1c74 62           ; ld h, d              |
1c75 fa 8b 1c     ; jp m, 0x1c8b         |
1c78 cd 06 1e     ; call 0x1e06          |
1c7b d2 c0 1c     ; jp nc, 0x1cc0        |
1c7e 04           ; inc b                |
1c7f ca b3 1c     ; jp z, 0x1cb3         |
1c82 7e           ; ld a, (hl)           |
1c83 ce 00        ; adc a, 0x0           |
1c85 27           ; daa                  |
1c86 77           ; ld (hl), a           |
1c87 23           ; inc hl               |
1c88 c3 7b 1c     ; jp 0x1c7b            |
1c8b cd 12 1e     ; call 0x1e12          |
1c8e da c0 1c     ; jp c, 0x1cc0         |
1c91 3e 99        ; ld a, 0x99           |
1c93 86           ; add a, (hl)          |
1c94 27           ; daa                  |
1c95 77           ; ld (hl), a           |
1c96 23           ; inc hl               |
1c97 c3 8e 1c     ; jp 0x1c8e            |
1c9a 1b           ; dec de               |
1c9b 2b           ; dec hl               |
1c9c 1a           ; ld a, (de)           |
1c9d be           ; cp (hl)              |
1c9e da ac 1c     ; jp c, 0x1cac         |
1ca1 ca 9a 1c     ; jp z, 0x1c9a         |
1ca4 cd fb 1d     ; call 0x1dfb          |
1ca7 eb           ; ex de, hl            |
1ca8 97           ; sub a                |
1ca9 c3 60 1c     ; jp 0x1c60            |
1cac cd fb 1d     ; call 0x1dfb          |
1caf 97           ; sub a                |
1cb0 c3 60 1c     ; jp 0x1c60            |
1cb3 1e 07        ; ld e, 0x7            |
1cb5 16 01        ; ld d, 0x1            |
1cb7 34           ; inc (hl)             |
1cb8 2b           ; dec hl               |
1cb9 7e           ; ld a, (hl)           |
1cba 72           ; ld (hl), d           |
1cbb 57           ; ld d, a              |
1cbc 1d           ; dec e                |
1cbd c2 b8 1c     ; jp nz, 0x1cb8        |
1cc0 e1           ; pop hl               |
1cc1 11 11 00     ; ld de, 0x11          |
1cc4 cd d1 1c     ; call 0x1cd1          |
1cc7 f1           ; pop af               |
1cc8 f1           ; pop af               |
1cc9 f1           ; pop af               |
1cca f1           ; pop af               |
1ccb c3 7c 18     ; jp 0x187c            | get next instr or address

;NORMY()
1cce 11 09 00     ; ld de, 0x9           |
1cd1 4e           ; ld c, (hl)           |
1cd2 eb           ; ex de, hl            |
1cd3 39           ; add hl, sp           |
1cd4 06 07        ; ld b, 0x7            |
1cd6 1b           ; dec de               |
1cd7 1a           ; ld a, (de)           |
1cd8 b7           ; or a                 |
1cd9 c2 e6 1c     ; jp nz, 0x1ce6        |
1cdc 0d           ; dec c                |
1cdd 05           ; dec b                |
1cde c2 d6 1c     ; jp nz, 0x1cd6        |
1ce1 0e 07        ; ld c, 0x7            |
1ce3 c3 f6 1c     ; jp 0x1cf6            |
1ce6 71           ; ld (hl), c           |
1ce7 3e 07        ; ld a, 0x7            |
1ce9 90           ; sub b                |
1cea 4f           ; ld c, a              |
1ceb 2b           ; dec hl               |
1cec 1a           ; ld a, (de)           |
1ced 1b           ; dec de               |
1cee 77           ; ld (hl), a           |
1cef 05           ; dec b                |
1cf0 c2 eb 1c     ; jp nz, 0x1ceb        |
1cf3 0d           ; dec c                |
1cf4 f8           ; ret m                |
1cf5 2b           ; dec hl               |
1cf6 36 00        ; ld (hl), 0x0         |
1cf8 c3 f3 1c     ; jp 0x1cf3            |
1cfb d1           ; pop de               | INST 01 - stack float from address on stack
1cfc 01 00 00     ; ld bc, 0x0           | push 8 0x00 on stack (subroutine?)
1cff c5           ; push bc              |
1d00 c5           ; push bc              |
1d01 c5           ; push bc              |
1d02 c5           ; push bc              |
1d03 cd 2b 1d     ; call 0x1d2b          | increment IPC
1d06 21 07 00     ; ld hl, 0x7           |
1d09 39           ; add hl, sp           |
1d0a 1a           ; ld a, (de)           |
1d0b 13           ; inc de               |
1d0c 77           ; ld (hl), a           |
1d0d 2b           ; dec hl               |
1d0e 0d           ; dec c                |
1d0f c2 0a 1d     ; jp nz, 0x1d0a        |
1d12 c3 7c 18     ; jp 0x187c            | get next instr or address
1d15 cd 2b 1d     ; call 0x1d2b          | INST 04 - store float
1d18 21 09 00     ; ld hl, 0x9           |
1d1b 39           ; add hl, sp           |
1d1c 56           ; ld d, (hl)           |
1d1d 2b           ; dec hl               |
1d1e 5e           ; ld e, (hl)           |
1d1f 2b           ; dec hl               |
1d20 7e           ; ld a, (hl)           |
1d21 12           ; ld (de), a           |
1d22 13           ; inc de               |
1d23 0d           ; dec c                |
1d24 c2 1f 1d     ; jp nz, 0x1d1f        |
1d27 f1           ; pop af               |
1d28 c3 c7 1c     ; jp 0x1cc7            |

;increment IPC value
1d2b 2a fe 40     ; ld hl, (0x40fe)      | hl = IPC addr
1d2e 4e           ; ld c, (hl)           |
1d2f 23           ; inc hl               |
1d30 22 fe 40     ; ld (0x40fe), hl      |
1d33 c9           ; ret                  |

;misc PL/1 code
1d34 e1           ; pop hl               | INST 1C - Go to address on top of stack
1d35 c3 7f 18     ; jp 0x187f            |
1d38 e1           ; pop hl               | INST 1D - Go to address on top of stack (conditional)
1d39 c1           ; pop bc               |
1d3a 78           ; ld a, b              |
1d3b b1           ; or c                 |
1d3c c2 7c 18     ; jp nz, 0x187c        | get next instr or address
1d3f c3 7f 18     ; jp 0x187f            |
1d42 21 0b 00     ; ld hl, 0xb           | INST 21 - Do loop control for decimal indexes
1d45 39           ; add hl, sp           |
1d46 4e           ; ld c, (hl)           |
1d47 11 08 00     ; ld de, 0x8           |
1d4a 19           ; add hl, de           |
1d4b 7e           ; ld a, (hl)           |
1d4c 23           ; inc hl               |
1d4d b7           ; or a                 |
1d4e ca 5c 1d     ; jp z, 0x1d5c         |
1d51 a9           ; xor c                |
1d52 fa 5c 1d     ; jp m, 0x1d5c         |
1d55 d1           ; pop de               |
1d56 d1           ; pop de               |
1d57 f9           ; ld sp, hl            |
1d58 eb           ; ex de, hl            |
1d59 c3 7f 18     ; jp 0x187f            |
1d5c d1           ; pop de               |
1d5d c1           ; pop bc               |
1d5e c3 57 1d     ; jp 0x1d57            |
1d61 d1           ; pop de               | INST 20 - Do loop control for binary indexes
1d62 e1           ; pop hl               |
1d63 c1           ; pop bc               |
1d64 e3           ; ex (sp), hl          |
1d65 7c           ; ld a, h              |
1d66 b5           ; or l                 |
1d67 ca 73 1d     ; jp z, 0x1d73         |
1d6a 7c           ; ld a, h              |
1d6b a8           ; xor b                |
1d6c fa 73 1d     ; jp m, 0x1d73         |
1d6f e1           ; pop hl               |
1d70 c3 7f 18     ; jp 0x187f            |
1d73 eb           ; ex de, hl            |
1d74 d1           ; pop de               |
1d75 c3 7f 18     ; jp 0x187f            |
1d78 2a fe 40     ; ld hl, (0x40fe)      | INST 05 - store decimal number as fixed point
1d7b 4e           ; ld c, (hl)           |
1d7c 23           ; inc hl               |
1d7d 46           ; ld b, (hl)           |
1d7e 23           ; inc hl               |
1d7f 22 fe 40     ; ld (0x40fe), hl      |
1d82 21 09 00     ; ld hl, 0x9           |
1d85 39           ; add hl, sp           |
1d86 56           ; ld d, (hl)           |
1d87 2b           ; dec hl               |
1d88 5e           ; ld e, (hl)           |
1d89 2b           ; dec hl               |
1d8a 7e           ; ld a, (hl)           |
1d8b eb           ; ex de, hl            |
1d8c e5           ; push hl              |
1d8d d5           ; push de              |
1d8e 90           ; sub b                |
1d8f 87           ; add a, a             |
1d90 f2 9f 1d     ; jp p, 0x1d9f         |
1d93 36 00        ; ld (hl), 0x0         |
1d95 23           ; inc hl               |
1d96 0d           ; dec c                |
1d97 ca b9 1d     ; jp z, 0x1db9         |
1d9a 3c           ; inc a                |
1d9b 3c           ; inc a                |
1d9c fa 93 1d     ; jp m, 0x1d93         |
1d9f 1b           ; dec de               |
1da0 1a           ; ld a, (de)           |
1da1 77           ; ld (hl), a           |
1da2 23           ; inc hl               |
1da3 0d           ; dec c                |
1da4 c2 9f 1d     ; jp nz, 0x1d9f        |
1da7 e6 f0        ; and 0xf0             |
1da9 2b           ; dec hl               |
1daa 05           ; dec b                |
1dab f2 af 1d     ; jp p, 0x1daf         |
1dae 77           ; ld (hl), a           |
1daf d1           ; pop de               |
1db0 e1           ; pop hl               |
1db1 1a           ; ld a, (de)           |
1db2 e6 80        ; and 0x80             |
1db4 b6           ; or (hl)              |
1db5 77           ; ld (hl), a           |
1db6 c3 27 1d     ; jp 0x1d27            |
1db9 f1           ; pop af               |
1dba f1           ; pop af               |
1dbb c3 27 1d     ; jp 0x1d27            |
1dbe cd fb 1d     ; call 0x1dfb          | INST 0D - negate decimal?
1dc1 b7           ; or a                 |
1dc2 ca 7c 18     ; jp z, 0x187c         | get next instr or address
1dc5 ee 80        ; xor 0x80             |
1dc7 12           ; ld (de), a           |
1dc8 c3 7c 18     ; jp 0x187c            | get next instr or address
1dcb d1           ; pop de               | INST 02 - stack dec num from address on stack
1dcc 01 00 00     ; ld bc, 0x0           |
1dcf c5           ; push bc              |
1dd0 c5           ; push bc              |
1dd1 c5           ; push bc              |
1dd2 c5           ; push bc              |
1dd3 2a fe 40     ; ld hl, (0x40fe)      |
1dd6 4e           ; ld c, (hl)           |
1dd7 23           ; inc hl               |
1dd8 7e           ; ld a, (hl)           |
1dd9 23           ; inc hl               |
1dda 22 fe 40     ; ld (0x40fe), hl      |
1ddd 21 07 00     ; ld hl, 0x7           |
1de0 39           ; add hl, sp           |
1de1 e5           ; push hl              |
1de2 77           ; ld (hl), a           |
1de3 2b           ; dec hl               |
1de4 1a           ; ld a, (de)           |
1de5 13           ; inc de               |
1de6 0d           ; dec c                |
1de7 f2 e2 1d     ; jp p, 0x1de2         |
1dea e1           ; pop hl               |
1deb 2b           ; dec hl               |
1dec 7e           ; ld a, (hl)           |
1ded 47           ; ld b, a              |
1dee e6 7f        ; and 0x7f             |
1df0 77           ; ld (hl), a           |
1df1 a8           ; xor b                |
1df2 23           ; inc hl               |
1df3 b6           ; or (hl)              |
1df4 77           ; ld (hl), a           |
1df5 cd ce 1c     ; call 0x1cce          | call aaaa()
1df8 c3 7c 18     ; jp 0x187c            | get next instr or address
1dfb 21 09 00     ; ld hl, 0x9           |
1dfe 11 08 00     ; ld de, 0x8           |
1e01 39           ; add hl, sp           |
1e02 eb           ; ex de, hl            |
1e03 19           ; add hl, de           |
1e04 1a           ; ld a, (de)           |
1e05 c9           ; ret                  |
1e06 b7           ; or a                 |
1e07 1a           ; ld a, (de)           |
1e08 8e           ; adc a, (hl)          |
1e09 27           ; daa                  |
1e0a 77           ; ld (hl), a           |
1e0b 23           ; inc hl               |
1e0c 13           ; inc de               |
1e0d 0d           ; dec c                |
1e0e c2 07 1e     ; jp nz, 0x1e07        |
1e11 c9           ; ret                  |
1e12 37           ; scf                  |
1e13 3e 99        ; ld a, 0x99           |
1e15 ce 00        ; adc a, 0x0           |
1e17 eb           ; ex de, hl            |
1e18 96           ; sub (hl)             |
1e19 eb           ; ex de, hl            |
1e1a 86           ; add a, (hl)          |
1e1b 27           ; daa                  |
1e1c 77           ; ld (hl), a           |
1e1d 13           ; inc de               |
1e1e 23           ; inc hl               |
1e1f 0d           ; dec c                |
1e20 c2 13 1e     ; jp nz, 0x1e13        |
1e23 c9           ; ret                  |
1e24 cd 53 1f     ; call 0x1f53          | INST 11 - divide decimal
1e27 cd fb 1d     ; call 0x1dfb          |
1e2a b7           ; or a                 |
1e2b ca c7 1c     ; jp z, 0x1cc7         |
1e2e 7e           ; ld a, (hl)           |
1e2f b7           ; or a                 |
1e30 ca c7 1c     ; jp z, 0x1cc7         |
1e33 e5           ; push hl              |
1e34 06 07        ; ld b, 0x7            |
1e36 21 18 42     ; ld hl, 0x4218        |
1e39 36 00        ; ld (hl), 0x0         |
1e3b 2b           ; dec hl               |
1e3c 1b           ; dec de               |
1e3d 1a           ; ld a, (de)           |
1e3e 77           ; ld (hl), a           |
1e3f b7           ; or a                 |
1e40 ca 44 1e     ; jp z, 0x1e44         |
1e43 4d           ; ld c, l              |
1e44 2b           ; dec hl               |
1e45 05           ; dec b                |
1e46 c2 3c 1e     ; jp nz, 0x1e3c        |
1e49 36 ff        ; ld (hl), 0xff        |
1e4b 69           ; ld l, c              |
1e4c e3           ; ex (sp), hl          |
1e4d 11 0d 42     ; ld de, 0x420d        |
1e50 06 07        ; ld b, 0x7            |
1e52 2b           ; dec hl               |
1e53 7e           ; ld a, (hl)           |
1e54 12           ; ld (de), a           |
1e55 1b           ; dec de               |
1e56 05           ; dec b                |
1e57 c2 52 1e     ; jp nz, 0x1e52        |
1e5a 06 11        ; ld b, 0x11           |
1e5c 05           ; dec b                |
1e5d c2 76 1e     ; jp nz, 0x1e76        |
1e60 f1           ; pop af               |
1e61 cd fb 1d     ; call 0x1dfb          |
1e64 96           ; sub (hl)             |
1e65 2f           ; cpl                  |
1e66 c6 41        ; add a, 0x41          |
1e68 21 07 42     ; ld hl, 0x4207        |
1e6b 34           ; inc (hl)             |
1e6c 35           ; dec (hl)             |
1e6d ca 72 1e     ; jp z, 0x1e72         |
1e70 3c           ; inc a                |
1e71 23           ; inc hl               |
1e72 77           ; ld (hl), a           |
1e73 c3 c1 1c     ; jp 0x1cc1            |
1e76 cd 3c 00     ; call 0x3c            |
1e79 11 18 42     ; ld de, 0x4218        |
1e7c 21 0f 42     ; ld hl, 0x420f        |
1e7f 1a           ; ld a, (de)           |
1e80 be           ; cp (hl)              |
1e81 1b           ; dec de               |
1e82 2b           ; dec hl               |
1e83 ca 7f 1e     ; jp z, 0x1e7f         |
1e86 3c           ; inc a                |
1e87 ca 8d 1e     ; jp z, 0x1e8d         |
1e8a d2 5c 1e     ; jp nc, 0x1e5c        |
1e8d 21 00 42     ; ld hl, 0x4200        |
1e90 34           ; inc (hl)             |
1e91 d1           ; pop de               |
1e92 d5           ; push de              |
1e93 7b           ; ld a, e              |
1e94 d6 09        ; sub 0x9              |
1e96 6f           ; ld l, a              |
1e97 3e 19        ; ld a, 0x19           |
1e99 93           ; sub e                |
1e9a 4f           ; ld c, a              |
1e9b cd 12 1e     ; call 0x1e12          |
1e9e c3 79 1e     ; jp 0x1e79            |
1ea1 12           ; ld (de), a           |
1ea2 1f           ; rra                  |
1ea3 78           ; ld a, b              |
1ea4 1f           ; rra                  |
1ea5 71           ; ld (hl), c           |
1ea6 1f           ; rra                  |
1ea7 89           ; adc a, c             |
1ea8 1f           ; rra                  |
1ea9 69           ; ld l, c              |
1eaa 1f           ; rra                  |
1eab 93           ; sub e                |
1eac 1f           ; rra                  |
1ead 9e           ; sbc a, (hl)          |
1eae 1f           ; rra                  |
1eaf 81           ; add a, c             |
1eb0 1f           ; rra                  |
1eb1 62           ; ld h, d              |
1eb2 1f           ; rra                  |
1eb3 cd 53 1f     ; call 0x1f53          | INST 0F - multiply decimal
1eb6 cd fb 1d     ; call 0x1dfb          |
1eb9 86           ; add a, (hl)          |
1eba d6 41        ; sub 0x41             |
1ebc 32 10 42     ; ld (0x4210), a       |
1ebf 3e ff        ; ld a, 0xff           |
1ec1 12           ; ld (de), a           |
1ec2 06 07        ; ld b, 0x7            |
1ec4 4b           ; ld c, e              |
1ec5 0d           ; dec c                |
1ec6 1b           ; dec de               |
1ec7 1a           ; ld a, (de)           |
1ec8 b7           ; or a                 |
1ec9 ca cd 1e     ; jp z, 0x1ecd         |
1ecc 4b           ; ld c, e              |
1ecd 05           ; dec b                |
1ece c2 c6 1e     ; jp nz, 0x1ec6        |
1ed1 59           ; ld e, c              |
1ed2 06 01        ; ld b, 0x1            |
1ed4 e5           ; push hl              |
1ed5 0e 07        ; ld c, 0x7            |
1ed7 e5           ; push hl              |
1ed8 26 42        ; ld h, 0x42           |
1eda 7b           ; ld a, e              |
1edb 95           ; sub l                |
1edc c6 17        ; add a, 0x17          |
1ede 6f           ; ld l, a              |
1edf e3           ; ex (sp), hl          |
1ee0 2b           ; dec hl               |
1ee1 7e           ; ld a, (hl)           |
1ee2 e3           ; ex (sp), hl          |
1ee3 c5           ; push bc              |
1ee4 e5           ; push hl              |
1ee5 d5           ; push de              |
1ee6 05           ; dec b                |
1ee7 c2 ee 1e     ; jp nz, 0x1eee        |
1eea 0f           ; rrca                 |
1eeb 0f           ; rrca                 |
1eec 0f           ; rrca                 |
1eed 0f           ; rrca                 |
1eee e6 0f        ; and 0xf              |
1ef0 ca 36 1f     ; jp z, 0x1f36         |
1ef3 07           ; rlca                 |
1ef4 c6 9f        ; add a, 0x9f          |
1ef6 4f           ; ld c, a              |
1ef7 06 1e        ; ld b, 0x1e           |
1ef9 d2 fd 1e     ; jp nc, 0x1efd        |
1efc 04           ; inc b                |
1efd 0a           ; ld a, (bc)           |
1efe 32 81 40     ; ld (0x4081), a       |
1f01 03           ; inc bc               |
1f02 0a           ; ld a, (bc)           |
1f03 32 82 40     ; ld (0x4082), a       |
1f06 06 00        ; ld b, 0x0            |
1f08 1a           ; ld a, (de)           |
1f09 13           ; inc de               |
1f0a 48           ; ld c, b              |
1f0b d5           ; push de              |
1f0c 06 00        ; ld b, 0x0            |
1f0e 5f           ; ld e, a              |
1f0f c3 80 40     ; jp 0x4080            |
1f12 d1           ; pop de               |
1f13 86           ; add a, (hl)          |
1f14 27           ; daa                  |
1f15 d2 19 1f     ; jp nc, 0x1f19        |
1f18 04           ; inc b                |
1f19 81           ; add a, c             |
1f1a 27           ; daa                  |
1f1b d2 1f 1f     ; jp nc, 0x1f1f        |
1f1e 04           ; inc b                |
1f1f 77           ; ld (hl), a           |
1f20 23           ; inc hl               |
1f21 1a           ; ld a, (de)           |
1f22 3c           ; inc a                |
1f23 c2 08 1f     ; jp nz, 0x1f08        |
1f26 7e           ; ld a, (hl)           |
1f27 80           ; add a, b             |
1f28 27           ; daa                  |
1f29 77           ; ld (hl), a           |
1f2a d2 36 1f     ; jp nc, 0x1f36        |
1f2d 23           ; inc hl               |
1f2e 7e           ; ld a, (hl)           |
1f2f ce 00        ; adc a, 0x0           |
1f31 27           ; daa                  |
1f32 77           ; ld (hl), a           |
1f33 da 2d 1f     ; jp c, 0x1f2d         |
1f36 d1           ; pop de               |
1f37 e1           ; pop hl               |
1f38 2b           ; dec hl               |
1f39 c1           ; pop bc               |
1f3a 0d           ; dec c                |
1f3b c2 df 1e     ; jp nz, 0x1edf        |
1f3e 05           ; dec b                |
1f3f ca 4b 1f     ; jp z, 0x1f4b         |
1f42 e1           ; pop hl               |
1f43 21 10 42     ; ld hl, 0x4210        |
1f46 7e           ; ld a, (hl)           |
1f47 2b           ; dec hl               |
1f48 c3 6b 1e     ; jp 0x1e6b            |
1f4b cd 3c 00     ; call 0x3c            |
1f4e e1           ; pop hl               |
1f4f e1           ; pop hl               |
1f50 c3 d5 1e     ; jp 0x1ed5            |

;CLEAR() - clear 16 bytes in scratch
1f53 06 08        ; ld b, 0x8            |
1f55 21 0f 42     ; ld hl, 0x420f        |
1f58 97           ; sub a                |
1f59 77           ; ld (hl), a           |
1f5a 2b           ; dec hl               |
1f5b 77           ; ld (hl), a           |
1f5c 2b           ; dec hl               |
1f5d 05           ; dec b                |
1f5e c2 59 1f     ; jp nz, 0x1f59        |
1f61 c9           ; ret                  |

;misc PL/1 code
1f62 83           ; add a, e             |
1f63 27           ; daa                  |
1f64 d2 69 1f     ; jp nc, 0x1f69        |
1f67 06 04        ; ld b, 0x4            |
1f69 57           ; ld d, a              |
1f6a 82           ; add a, d             |
1f6b 27           ; daa                  |
1f6c d2 71 1f     ; jp nc, 0x1f71        |
1f6f 04           ; inc b                |
1f70 04           ; inc b                |
1f71 57           ; ld d, a              |
1f72 82           ; add a, d             |
1f73 27           ; daa                  |
1f74 d2 78 1f     ; jp nc, 0x1f78        |
1f77 04           ; inc b                |
1f78 83           ; add a, e             |
1f79 27           ; daa                  |
1f7a d2 12 1f     ; jp nc, 0x1f12        |
1f7d 04           ; inc b                |
1f7e c3 12 1f     ; jp 0x1f12            |
1f81 83           ; add a, e             |
1f82 27           ; daa                  |
1f83 d2 88 1f     ; jp nc, 0x1f88        |
1f86 06 04        ; ld b, 0x4            |
1f88 5f           ; ld e, a              |
1f89 83           ; add a, e             |
1f8a 27           ; daa                  |
1f8b 5f           ; ld e, a              |
1f8c d2 78 1f     ; jp nc, 0x1f78        |
1f8f 04           ; inc b                |
1f90 c3 77 1f     ; jp 0x1f77            |
1f93 83           ; add a, e             |
1f94 27           ; daa                  |
1f95 5f           ; ld e, a              |
1f96 d2 71 1f     ; jp nc, 0x1f71        |
1f99 06 03        ; ld b, 0x3            |
1f9b c3 71 1f     ; jp 0x1f71            |
1f9e 57           ; ld d, a              |
1f9f 83           ; add a, e             |
1fa0 27           ; daa                  |
1fa1 5f           ; ld e, a              |
1fa2 d2 a7 1f     ; jp nc, 0x1fa7        |
1fa5 06 03        ; ld b, 0x3            |
1fa7 83           ; add a, e             |
1fa8 27           ; daa                  |
1fa9 d2 72 1f     ; jp nc, 0x1f72        |
1fac 04           ; inc b                |
1fad c3 72 1f     ; jp 0x1f72            |
1fb0 c1           ; pop bc               | INST 34 - VERIFY
1fb1 e1           ; pop hl               |
1fb2 d1           ; pop de               |
1fb3 1c           ; inc e                |
1fb4 1d           ; dec e                |
1fb5 ca d4 1f     ; jp z, 0x1fd4         |
1fb8 e3           ; ex (sp), hl          |
1fb9 7e           ; ld a, (hl)           |
1fba 23           ; inc hl               |
1fbb e3           ; ex (sp), hl          |
1fbc c5           ; push bc              |
1fbd e5           ; push hl              |
1fbe be           ; cp (hl)              |
1fbf ca cf 1f     ; jp z, 0x1fcf         |
1fc2 23           ; inc hl               |
1fc3 0d           ; dec c                |
1fc4 c2 be 1f     ; jp nz, 0x1fbe        |
1fc7 41           ; ld b, c              |
1fc8 f1           ; pop af               |
1fc9 f1           ; pop af               |
1fca f1           ; pop af               |
1fcb c5           ; push bc              |
1fcc c3 7c 18     ; jp 0x187c            | get next instr or address
1fcf e1           ; pop hl               |
1fd0 c1           ; pop bc               |
1fd1 c3 b4 1f     ; jp 0x1fb4            |
1fd4 f1           ; pop af               |
1fd5 53           ; ld d, e              |
1fd6 1b           ; dec de               |
1fd7 d5           ; push de              |
1fd8 c3 7c 18     ; jp 0x187c            | get next instr or address
1fdb c1           ; pop bc               | INST 30 - string length
1fdc e1           ; pop hl               |
1fdd cd e7 1f     ; call 0x1fe7          |
1fe0 48           ; ld c, b              |
1fe1 06 00        ; ld b, 0x0            |
1fe3 c5           ; push bc              |
1fe4 c3 7c 18     ; jp 0x187c            | get next instr or address
1fe7 0c           ; inc c                |
1fe8 7e           ; ld a, (hl)           |
1fe9 23           ; inc hl               |
1fea b7           ; or a                 |
1feb c8           ; ret z                |
1fec 0d           ; dec c                |
1fed c8           ; ret z                |
1fee 04           ; inc b                |
1fef c3 e8 1f     ; jp 0x1fe8            |
1ff2 c1           ; pop bc               | INST 35 - INDEX
1ff3 d1           ; pop de               |
1ff4 79           ; ld a, c              |
1ff5 c1           ; pop bc               |
1ff6 e1           ; pop hl               |
1ff7 47           ; ld b, a              |
1ff8 cd 39 00     ; call 0x39            | jump via 0x4f to 0x734
1ffb e5           ; push hl              |
1ffc c3 7c 18     ; jp 0x187c            | get next instr or address
1fff ff           ; rst 0x38             |