0000- 12 .TF SCIOS_Version_3.bin ; object file 0000- 13 ; .TF SCIOS_version_3.hex,INT ; Intel hex file 0000- 14 ; 0F00- 15 RAM .EQ $0F00 0D00- 16 DISPLY .EQ $0D00 0000- 17 ; 0000- 18 ; RAM Offsets 0000- 19 ; 0000- 20 DL .EQ 0 ; Segment for digit 1 0001- 21 DH .EQ 1 ; Segment for digit 2 0002- 22 D3 .EQ 2 ; Segment for digit 3 0003- 23 D4 .EQ 3 ; Segment for digit 4 0004- 24 ADLL .EQ 4 ; Segment for digit 5 0005- 25 ADLH .EQ 5 ; Segment for digit 6 0006- 26 ADHL .EQ 6 ; Segment for digit 7 0007- 27 ADHH .EQ 7 ; Segment for digit 8 0008- 28 D9 .EQ 8 ; Segment for digit 9 0009- 29 CNT .EQ 9 ; Counter 000A- 30 PUSHED .EQ 10 ; Key Pushed 000B- 31 CHAR .EQ 11 ; Char Read 000C- 32 ADL .EQ 12 ; Memory Address Low 000D- 33 WORD .EQ 13 ; Memory Word 000E- 34 ADH .EQ 14 ; Memory High 000F- 35 DDTA .EQ 15 ; First Flag 0010- 36 ROW .EQ 16 ; Row Counter 0011- 37 NEXT .EQ 17 ; Flag for now data 0000- 38 ; 0000- 39 ; RAM Pointers used by SCIOS, P3 is saved elsewhere 0000- 40 ; 0FF9- 41 P1H .EQ $0FF9 0FFA- 42 P1L .EQ $0FFA 0FFB- 43 P2H .EQ $0FFB 0FFC- 44 P2L .EQ $0FFC 0FFD- 45 A .EQ $0FFD 0FFE- 46 EE .EQ $0FFE ('E' is a reserved word) 0FFF- 47 S .EQ $0FFF 0000- 48 ; 0000- 49 ; Monitor Operation Summary 0000- 50 ; 0000- 51 ; Initially in 'Address Entry' Mode 0000- 52 ; 0000- 53 ; TERM: 0000- 54 ; Change to 'Data Entry' Mode 0000- 55 ; 0000- 56 ; MEM: 0000- 57 ; Increment Memory Address 0000- 58 ; 0000- 59 ; GO: 0000- 60 ; The registers are loaded from RAM and program 0000- 61 ; is transferred using XPPC P3. 0000- 62 ; To get back do XPPC P3. 0000- 63 ; 0000- 64 .OR $0000 ; set origin 0000- 65 ; 0000- 66 ; Monitor Listing 0000- 67 ; Source file: scios_version_3.asm *** Warning: Instruction starts at page boundary 68 HALT ; zeros displayed on reset 0000-00 68 ( 8) HALT ; zeros displayed on reset 0001-CF FF 69 ( 18) ST @-1(3) ; SO P3=-1 0003- 70 ; 0003-90 1E 71 ( 11) JMP START 0005- 72 ; 0005- 73 ; Debug Exit 0005- 74 ; Restore Environment 0005- 75 ; 0005-37 76 ( 8) GOOUT: XPAH 3 0006-C2 0C 77 ( 18) LD ADL(2) 0008-33 78 ( 8) XPAL 3 0009-C7 FF 79 ( 18) LD @-1(3) ; fix go address 000B-C0 F2 80 ( 18) LD EE 000D-01 81 ( 7) XAE ; restore registers 000E-C0 EB 82 ( 18) LD P1L 0010-31 83 ( 8) XPAL 1 0011-C0 E7 84 ( 18) LD P1H 0013-35 85 ( 8) XPAH 1 0014-C0 E7 86 ( 18) LD P2L 0016-32 87 ( 8) XPAL 2 0017-C0 E3 88 ( 18) LD P2H 0019-36 89 ( 8) XPAH 2 001A-C0 E4 90 ( 18) LD S 001C-00 91 ( 8) HALT ; reset single step 001D-07 92 ( 6) CAS 001E-C0 DE 93 ( 18) LD A 0020-08 94 ( 5) NOP 0021-05 95 ( 6) IEN 0022-3F 96 ( 7) XPPC 3 0023- 97 ; Entry Point for Debug 0023-C8 D9 98 ( 18) START: ST A 0025-40 99 ( 6) LDE 0026-C8 D7 100 ( 18) ST EE 0028-06 101 ( 5) CSA 0029-C8 D5 102 ( 18) ST S 002B-35 103 ( 8) XPAH 1 002C-C8 CC 104 ( 18) ST P1H 002E-31 105 ( 8) XPAL 1 002F-C8 CA 106 ( 18) ST P1L 0031-C4 0F 107 ( 10) LDI /RAM ; point P2 to RAM 0033-36 108 ( 8) XPAH 2 0034-C8 C6 109 ( 18) ST P2H 0036-C4 00 110 ( 10) LDI #RAM 0038-32 111 ( 8) XPAL 2 0039-C8 C2 112 ( 18) ST P2L 003B-C7 01 113 ( 18) LD @1(3) ; bump P3 for return 003D-33 114 ( 8) XPAL 3 ; save P3 003E-CA 0C 115 ( 18) ST ADL(2) 0040-37 116 ( 8) XPAH 3 0041-CA 0E 117 ( 18) ST ADH(2) 0043-C4 00 118 ( 10) LDI 0 0045-CA 02 119 ( 18) ST D3(2) 0047-CA 03 120 ( 18) ST D4(2) 0049-C4 01 121 ( 10) LDI 1 004B-37 122 ( 8) XPAH 3 004C-90 6D 123 ( 11) ABORT: JMP MEM 004E-C2 0E 124 ( 18) GONOW: LD ADH(2) 0050-90 B3 125 ( 11) JMP GOOUT 0052- 126 ; 0052- 127 ; Intel Hex file fast loader (packet = 1 line from hex file) 0052- 128 ; Created by Ian Murray (Coolsnaz2) 0052- 129 ; 07/02/2023 0052- 130 ; 0052- 131 ; Transmitted data sequence is: 0052- 132 ; Byte 1 - number of bytes in packet or zero equals End of file 0052- 133 ; Byte 2 - High byte of load/execution address 0052- 134 ; Byte 3 - Low byte of load/execution address 0052- 135 ; Packet data (1 to 16 bytes) 0052- 136 ; Note the loader decrements the execution address before starting so you don't need to compensate for the 8060 0052- 137 ; 0052- 138 ; .OR $0052 0052- 139 ; 0052- 140 ; define variables. 0052- 141 ; P2 must contain zero, so requires a reset before executing INTEL_HEX 0052- 142 ; FFFFFFF8- 143 COUNT .EQ -8 FFFFFFF9- 144 LEN .EQ -7 FFFFFFFA- 145 TASK .EQ -6 0052- 146 ; 0052- 147 INTEL_HEX 0052-C4 08 148 ( 10) LDI 0x08 ; 0000 1000 0054-CA FA 149 ( 18) ST TASK(2) 0056-C2 FA 150 ( 18) NXTASK LD TASK(2) 0058-1C 151 ( 5) SR 0059-CA FA 152 ( 18) STTASK ST TASK(2) 005B- 153 ; 005B-C4 08 154 ( 10) GBYTE LDI 8 ; Loop Bits In Byte 005D-CA F8 155 ( 18) ST COUNT(2) 005F-06 156 ( 5) LOOP CSA 0060-D4 20 157 ( 10) ANI 0x20 0062-98 FB 158 (9/11) JZ LOOP 0064-19 159 ( 5) SIO 0065-06 160 ( 5) LOOP2 CSA 0066-D4 20 161 ( 10) ANI 0x20 0068-9C FB 162 (9/11) JNZ LOOP2 006A-BA F8 163 ( 22) DLD COUNT(2) 006C-9C F1 164 (9/11) JNZ LOOP 006E-C2 FA 165 ( 18) LD TASK(2) 0070-98 18 166 (9/11) JZ TASK0 ; 0000 0000 Load Data 0072-1C 167 ( 5) SR 0073-98 0C 168 (9/11) JZ TASK1 ; 0000 0001 Low byte of load/execution address 0075-1C 169 ( 5) SR 0076-98 05 170 (9/11) JZ TASK2 ; 0000 0010 High byte of load/execution address 0078- 171 ; 0078-40 172 ( 6) TASK4 LDE ; 0000 0100 Get Length Of Segmant or Zero if EOF 0079-CA F9 173 ( 18) ST LEN(2) 007B-90 D9 174 ( 11) JMP NXTASK 007D- 175 ; 007D-40 176 ( 6) TASK2 LDE ; Task2 is High byte of load address/execution address 007E-35 177 ( 8) XPAH 1 007F-90 D5 178 ( 11) JMP NXTASK 0081- 179 ; 0081-40 180 ( 6) TASK1 LDE ; Task1 is Low byte of load address/execution address 0082-31 181 ( 8) XPAL 1 0083-C2 F9 182 ( 18) LD LEN(2) ; Check for EOF Len = zero 0085-9C CF 183 (9/11) JNZ NXTASK 0087- 184 ; 0087-C5 FF 185 ( 18) END LD @-1(1) ; Adjust P1 to set correct execution address 0089-3D 186 ( 7) XPPC 1 008A- 187 ; 008A-40 188 ( 6) TASK0 LDE ; Task0 is load data 008B-CD 01 189 ( 18) ST @+1(1) 008D-BA F9 190 ( 22) DLD LEN(2) 008F-9C CA 191 (9/11) JNZ GBYTE 0091-90 BF 192 ( 11) JMP INTEL_HEX 0093- 193 ; 0093- 194 ; Offset Calculation = 0093 0093- 195 ; 0093-C6 FE 196 ( 18) OFFSET: LD @-2(2) ; subtract 2 from destination address 0095-32 197 ( 8) XPAL 2 ; put low byte in AC 0096-03 198 ( 5) SCL ; set carry for subtraction 0097-FB D8 199 ( 20) CAD -40(3) ; subtract low byte of jump instruction address ($D8) 0099-C9 01 200 ( 18) ST +1(1) ; Put in jump operand 009B-3F 201 ( 7) XPPC 3 ; return to monitor 009C-08 202 ( 5) NOP 009D-AA 0E 203 ( 22) DTACK: ILD ADH(2) 009F-90 36 204 ( 11) JMP DATA 00A1-C2 0E 205 ( 18) MEMDN: LD ADH(2) ; put word in memory 00A3-35 206 ( 8) XPAH 1 00A4-C2 0C 207 ( 18) LD ADL(2) 00A6-31 208 ( 8) XPAL 1 00A7-C2 0D 209 ( 18) LD WORD(2) 00A9-C9 00 210 ( 18) ST (1) 00AB-90 34 211 ( 11) JMP DATACK 00AD-E4 06 212 ( 10) MEMCK: XRI $06 ; check for GO 00AF-98 9D 213 (9/11) JZ GONOW 00B1-E4 05 214 ( 10) XRI $05 ; check for TERM 00B3-98 22 215 (9/11) JZ DATA ; check if done 00B5-AA 0C 216 ( 22) ILD ADL(2) ; update address low 00B7-9C 1E 217 (9/11) JNZ DATA 00B9-90 E2 218 ( 11) JMP DTACK 00BB- 219 ; Mem Key Pushed 00BB-C4 FF 220 ( 10) MEM: LDI -1 00BD-CA 11 221 ( 18) ST NEXT(2) ; set first flag 00BF-CA 0F 222 ( 18) ST DDTA(2) ; set flag for address now 00C1-C2 0E 223 ( 18) MEML: LD ADH(2) 00C3-35 224 ( 8) XPAH 1 ; set P1 for memory address 00C4-C2 0C 225 ( 18) LD ADL(2) 00C6-31 226 ( 8) XPAL 1 00C7-C1 00 227 ( 18) LD (1) 00C9-CA 0D 228 ( 18) ST WORD(2) ; save memory data 00CB-C4 3F 229 ( 10) LDI #DISPD-1 ; fix data segment 00CD-33 230 ( 8) XPAL 3 00CE-3F 231 ( 7) XPPC 3 ; go to DISPD set segment for data 00CF-90 DC 232 ( 11) JMP MEMCK ; command return 00D1-C4 1A 233 ( 10) LDI #ADR-1 ; make address 00D3-33 234 ( 8) XPAL 3 00D4-3F 235 ( 7) XPPC 3 00D5-90 EA 236 ( 11) JMP MEML ; get next character 00D7-C4 FF 237 ( 10) DATA: LDI -1 ; set first flag 00D9-CA 0F 238 ( 18) ST DDTA(2) 00DB-C2 0E 239 ( 18) LD ADH(2) ; set P1 to memory address 00DD-35 240 ( 8) XPAH 1 00DE-C2 0C 241 ( 18) LD ADL(2) 00E0-31 242 ( 8) XPAL 1 00E1-C1 00 243 ( 18) DATACK: LD (1) ; read data word 00E3-CA 0D 244 ( 18) ST WORD(2) ; save for display 00E5-C4 3F 245 ( 10) DATAL: LDI #DISPD-1 ; fix data segment 00E7-33 246 ( 8) XPAL 3 00E8-3F 247 ( 7) XPPC 3 ; fix data segment-GO to DISPD 00E9-90 C2 248 ( 11) JMP MEMCK ; character return 00EB-C4 04 249 ( 10) LDI 4 ; set counter for number of shifts 00ED-CA 09 250 ( 18) ST CNT(2) 00EF-AA 0F 251 ( 22) ILD DDTA(2) ; check if first 00F1-9C 06 252 (9/11) JNZ DNFST 00F3-C4 00 253 ( 10) LDI 0 ; zero word if first 00F5-CA 0D 254 ( 18) ST WORD(2) 00F7-CA 11 255 ( 18) ST NEXT(2) ; set flag for address done 00F9-02 256 ( 5) DNFST: CCL 00FA-C2 0D 257 ( 18) LD WORD(2) ; shift left 00FC-F2 0D 258 ( 19) ADD WORD(2) 00FE-CA 0D 259 ( 18) ST WORD(2) 0100-BA 09 260 ( 22) DLD CNT(2) ; check for 4 shifts 0102-9C F5 261 (9/11) JNZ DNFST 0104-C2 0D 262 ( 18) LD WORD(2) ; add new data 0106-58 263 ( 6) ORE 0107-CA 0D 264 ( 18) ST WORD(2) 0109-90 96 265 ( 11) JMP MEMDN 010B- 266 ; Segment Assignments 0001- 267 SA .EQ 1 0002- 268 SB .EQ 2 0004- 269 SC .EQ 4 0008- 270 SD .EQ 8 0010- 271 SE .EQ 16 0020- 272 SF .EQ 32 0040- 273 SG .EQ 64 010B- 274 ; 'Hex Number to Seven Segment Table' 010B-3F 275 CROM: .DB SA+SB+SC+SD+SE+SF 010C-06 276 .DB SB+SC 010D-5B 277 .DB SA+SB+SD+SE+SG 010E-4F 278 .DB SA+SB+SC+SD+SG 010F-66 279 .DB SB+SC+SF+SG 0110-6D 280 .DB SA+SC+SD+SF+SG 0111-7D 281 .DB SA+SC+SD+SE+SF+SG 0112-07 282 .DB SA+SB+SC 0113-7F 283 .DB SA+SB+SC+SD+SE+SF+SG 0114-67 284 .DB SA+SB+SC+SF+SG 0115-77 285 .DB SA+SB+SC+SE+SF+SG 0116-7C 286 .DB SC+SD+SE+SF+SG 0117-39 287 .DB SA+SD+SE+SF 0118-5E 288 .DB SB+SC+SD+SE+SG 0119-79 289 .DB SA+SD+SE+SF+SG 011A-71 290 .DB SA+SE+SF+SG 011B- 291 ; 'Make 4 Digit Address' 011B- 292 ; Shift address left one digit then add new low hex 011B- 293 ; digit, hex digit in E register, P2 points to RAM 011B-C4 04 294 ( 10) ADR: LDI 4 ; set number of shifts 011D-CA 09 295 ( 18) ST CNT(2) 011F-AA 0F 296 ( 22) ILD DDTA(2) ; check if first) 0121-9C 06 297 (9/11) JNZ NOTFST ; jump if no 0123-C4 00 298 ( 10) LDI 0 ; zero address 0125-CA 0E 299 ( 18) ST ADH(2) 0127-CA 0C 300 ( 18) ST ADL(2) 0129-02 301 ( 5) NOTFST: CCL ; clear link 012A-C2 0C 302 ( 18) LD ADL(2) ; shift address left 4 times 012C-F2 0C 303 ( 19) ADD ADL(2) 012E-CA 0C 304 ( 18) ST ADL(2) ; save it 0130-C2 0E 305 ( 18) LD ADH(2) ; now shift high 0132-F2 0E 306 ( 19) ADD ADH(2) 0134-CA 0E 307 ( 18) ST ADH(2) 0136-BA 09 308 ( 22) DLD CNT(2) ; check if shifted 4 times 0138-9C EF 309 (9/11) JNZ NOTFST ; jump if not done 013A-C2 0C 310 ( 18) LD ADL(2) ; now add new number 013C-58 311 ( 6) ORE 013D-CA 0C 312 ( 18) ST ADL(2) ; number is now updated 013F-3F 313 ( 7) XPPC 3 0140- 314 ; 'Data to Segments' 0140- 315 ; Convert hex data to segments, P2 points to RAM, drops through to hex conversion 0140-C4 01 316 ( 10) DISPD: LDI /CROM ; set address of table 0142-35 317 ( 8) XPAH 1 0143-C4 0B 318 ( 10) LDI #CROM 0145-31 319 ( 8) XPAL 1 0146-C2 0D 320 ( 18) LD WORD(2) ; get memory word 0148-D4 0F 321 ( 10) ANI $0F 014A-01 322 ( 7) XAE 014B-C1 80 323 ( 18) LD -128(1) ; get segment display 014D-CA 00 324 ( 18) ST DL(2) ; save at data low 014F-C2 0D 325 ( 18) LD WORD(2) ; fix high 0151-1C 326 ( 5) SR ; shift high to low 0152-1C 327 ( 5) SR 0153-1C 328 ( 5) SR 0154-1C 329 ( 5) SR 0155-01 330 ( 7) XAE 0156-C1 80 331 ( 18) LD -128(1) ; get segments 0158-CA 01 332 ( 18) ST DH(2) ; save in data high 015A- 333 ; 'Address to Segments' 015A- 334 ; P2 points to RAM, drops through to keyboard and display 015A-03 335 ( 5) DISPA: SCL 015B-C4 01 336 ( 10) LDI /CROM ; set address of table 015D-35 337 ( 8) XPAH 1 015E-C4 0B 338 ( 10) LDI #CROM 0160-31 339 ( 8) XPAL 1 0161-C2 0C 340 ( 18) LOOPD: LD ADL(2) ; get address 0163-D4 0F 341 ( 10) ANI $0F 0165-01 342 ( 7) XAE 0166-C1 80 343 ( 18) LD -128(1) ; get segments 0168-CA 04 344 ( 18) ST ADLL(2) ; save segment of ADR LL 016A-C2 0C 345 ( 18) LD ADL(2) 016C-1C 346 ( 5) SR ; shift high digit to low 016D-1C 347 ( 5) SR 016E-1C 348 ( 5) SR 016F-1C 349 ( 5) SR 0170-01 350 ( 7) XAE 0171-C1 80 351 ( 18) LD -128(1) ; get segments 0173-CA 05 352 ( 18) ST ADLH(2) 0175-06 353 ( 5) CSA ; check if done 0176-D4 80 354 ( 10) ANI $080 0178-98 09 355 (9/11) JZ DONEB 017A-02 356 ( 5) CCL ; clear flag 017B-C4 00 357 ( 10) LDI 0 017D-CA 03 358 ( 18) ST D4(2) ; zero digit 4 017F-C6 02 359 ( 18) LD @2(2) ; fix P2 for next loop 0181-90 DE 360 ( 11) JMP LOOPD 0183-C6 FE 361 ( 18) DONEB: LD @-2(2) ; fix P2 0185- 362 ; 'Display and Keyboard Input' 0185- 363 ; Call XPPC 3 0185- 364 ; Jump command in A GO=6, MEM=7,TERM=3 0185- 365 ; in E GO=22, MEM=23, TERM=27 0185- 366 ; Number return hex number in E register 0185- 367 ; Abort key goes to abort 0185- 368 ; All registers are used 0185- 369 ; P2 must point to RAM, address must be XXX0 0185- 370 ; To re-execute routine do XPPC3 0185-C4 00 371 ( 10) KYBD: LDI 0 ; zero character 0187-CA 0B 372 ( 18) ST CHAR(2) 0189-C4 0D 373 ( 10) LDI /DISPLY ; set display address 018B-35 374 ( 8) XPAH 1 018C-C4 FF 375 ( 10) OFF: LDI -1 ; set row/digit address 018E-CA 10 376 ( 18) ST ROW(2) ; save row counter 0190-C4 0A 377 ( 10) LDI 10 ; set row counter 0192-CA 09 378 ( 18) ST CNT(2) 0194-C4 00 379 ( 10) LDI 0 0196-CA 0A 380 ( 18) ST PUSHED(2) ; zero keyboard input 0198-31 381 ( 8) XPAL 1 ; set display address low 0199-AA 10 382 ( 22) LOOPB: ILD ROW(2) ; update row address 019B-01 383 ( 7) XAE 019C-C2 80 384 ( 18) LD -128(2) ; get segment 019E-C9 80 385 ( 18) ST -128(1) ; send it 01A0-8F 00 386 ( 13+) DLY 0 ; delay for display 01A2-C1 80 387 ( 18) LD -128(1) ; get keyboard input 01A4-E4 FF 388 ( 10) XRI $FF ; check if pushed 01A6-9C 4C 389 (9/11) JNZ KEY ; jump if pushed 01A8-BA 09 390 ( 22) BACK: DLD CNT(2) ; check if done 01AA-9C ED 391 (9/11) JNZ LOOPB ; no if jump 01AC-C2 0A 392 ( 18) LD PUSHED(2) ; check if key 01AE-98 0A 393 (9/11) JZ CKMORE 01B0-C2 0B 394 ( 18) LD CHAR(2) ; was there a character ? 01B2-9C D8 395 (9/11) JNZ OFF ; yes wait for release 01B4-C2 0A 396 ( 18) LD PUSHED(2) ; no set character 01B6-CA 0B 397 ( 18) ST CHAR(2) 01B8-90 D2 398 ( 11) JMP OFF 01BA-C2 0B 399 ( 18) CKMORE: LD CHAR(2) 01BC-98 CE 400 (9/11) JZ OFF 01BE- 401 ; Command Key Processing 01BE-01 402 ( 7) COMAND: XAE ; save character 01BF-40 403 ( 6) LDE ; get character 01C0-D4 20 404 ( 10) ANI $020 ; check for command 01C2-9C 28 405 (9/11) JNZ CMND ; jump if command 01C4-C4 80 406 ( 10) LDI $080 ; find number 01C6-50 407 ( 6) ANE 01C7-9C 1B 408 (9/11) JNZ LT7 ; 0 to 7 01C9-C4 40 409 ( 10) LDI $040 01CB-50 410 ( 6) ANE 01CC-9C 19 411 (9/11) JNZ N89 ; 8 or 9 01CE-C4 0F 412 ( 10) LDI $0F 01D0-50 413 ( 6) ANE 01D1-F4 07 414 ( 11) ADI $7 ; make offset to table 01D3-01 415 ( 7) XAE ; put offset away 01D4-C0 80 416 ( 18) LD -128(0) ; get number 01D6-01 417 ( 7) KEYRTN: XAE ; save in E 01D7-C7 02 418 ( 18) LD @2(3) ; fix return 01D9-3F 419 ( 7) XPPC 3 ; return 01DA-90 A9 420 ( 11) JMP KYBD ; allows XPPC P3 to return 01DC-0A 0B 0C 0D 00 00 0E 0F 421 .DB $0A,$0B,$0C,$0D,$0,$0,$0E,$0F 01E4-60 422 ( 6) LT7: XRE ; keep low digit 01E5-90 EF 423 ( 11) JMP KEYRTN 01E7-60 424 ( 6) N89: XRE ; get low 01E8-F4 08 425 ( 11) ADI $08 ; make digit 8 or 9 01EA-90 EA 426 ( 11) JMP KEYRTN 01EC-60 427 ( 6) CMND: XRE 01ED-E4 04 428 ( 10) XRI $04 ; check if abort 01EF-98 08 429 (9/11) JZ ABRT ; abort 01F1-3F 430 ( 7) XPPC 3 ; in E 23=MEM, 22=GO, 27=TERM 01F2- 431 ; in A 7=MEM, 6=GO, 3=TERM 01F2-90 91 432 ( 11) JMP KYBD ; allows just a XPPC P3 to return 01F4-58 433 ( 6) KEY: ORE ; make character 01F5-CA 0A 434 ( 18) ST PUSHED(2) ; save character 01F7-90 AF 435 ( 11) JMP BACK 01F9-C4 00 436 ( 10) ABRT: LDI \ABORT 01FB-37 437 ( 8) XPAH 3 01FC-C4 4B 438 ( 10) LDI #ABORT-1 01FE-33 439 ( 8) XPAL 3 01FF-3F 440 ( 7) XPPC 3 ; go to abort 0200- 441 .END