; *** ERROR: Descending address: 000D-000F 4: Disk Status DS$ descriptor (length/ptr) *** ; *** ERROR: Descending address: 03e9 4.40 *** ; *** ERROR: Descending address: 03ea 4.40 *** ; *** ERROR: Descending address: 03eb 4.40 *** ; *** ERROR: Descending address: 03ec 4.40: Chime Time *** ; *** ERROR: Descending address: 03ed 4.40: Counter to speed TI by 6/5 *** ; *** ERROR: Descending address: e1aa ? *** ; 3: free space for 4K EPROM\stmdsp BASIC Command Vectors WORD ; Commodore PET 8032 ROM Memory Map ; V1.3 20 May 1995 ; ; BASIC 4.0 Interpreter ROM ($B000 - $DFFF) ; ; BASIC 4.0 Interpreter ; Machine Language Monitor ; B000 sB000 .word B7C7 B6DD BD18 B882 BBA3 BBBD C120 BC01 B010 .word B92F B82F B807 B8B2 B7B6 B812 B85C B8C5 B020 .word B7C5 B8D5 C962 FFD4 FFD7 FFDA C4DB C959 B030 .word BA87 BAA7 B7ED B62F B5ED BA8D FFDD FFBF B040 .word FFC2 BB79 B5D1 B7AB FF92 FF95 FF98 FF9B B050 .word FF9E FFA1 FFA4 FFA7 FFAA FFAD FFB0 FFB3 B060 .word FFB6 FFB9 FFB3 ; fundsp BASIC Function Vectors WORD B066 .word CD6F CE02 CD8E 0000 C4A8 C4C9 D108 D229 B076 .word CB20 D184 D282 D289 D2D2 D32C C943 C8B2 B086 .word C58E C8E3 C8C1 C822 C836 C862 C86D ; optab BASIC Operator Vectors DATA ; Each Operator Vector is preceded by a priority code. B094 sB094 .byte 79 ;Y B095 sB095 .byte 9F ;. B096 sB096 .byte C9 79 88 C9 7B 60 CB 7B ;IY.I{`K{ B09E .byte 47 CC 7F 11 D1 50 88 C0 ;gL..Qp.. B0A6 .byte 46 85 C0 7D 4A D1 5A CB ;f..}jQzK B0AE .byte BE 64 B5 C0 ;.D.. ; reslst BASIC Command Keyword Table DATA B0B2 .byte 45 4E C4 46 4F D2 4E 45 ;enDfoRne B0BA .byte 58 D4 44 41 54 C1 49 4E ;xTdatAin B0C2 .byte 50 55 54 A3 49 4E 50 55 ;put.inpu B0CA .byte D4 44 49 CD 52 45 41 C4 ;TdiMreaD B0D2 .byte 4C 45 D4 47 4F 54 CF 52 ;leTgotOr B0DA .byte 55 CE 49 C6 52 45 53 54 ;uNiFrest B0E2 .byte 4F 52 C5 47 4F 53 55 C2 ;orEgosuB B0EA .byte 52 45 54 55 52 CE 52 45 ;returNre B0F2 .byte CD 53 54 4F D0 4F CE 57 ;MstoPoNw B0FA .byte 41 49 D4 4C 4F 41 C4 53 ;aiTloaDs B102 .byte 41 56 C5 56 45 52 49 46 ;avEverif B10A .byte D9 44 45 C6 50 4F 4B C5 ;YdeFpokE B112 .byte 50 52 49 4E 54 A3 50 52 ;print.pr B11A .byte 49 4E D4 43 4F 4E D4 4C ;inTconTl B122 .byte 49 53 D4 43 4C D2 43 4D ;isTclRcm B12A .byte C4 53 59 D3 4F 50 45 CE ;DsySopeN B132 .byte 43 4C 4F 53 C5 47 45 D4 ;closEgeT B13A .byte 4E 45 D7 ;neW ; msclst BASIC Misc. Keyword Table DATA B13D .byte 54 41 42 A8 54 CF 46 CE ;tab.tOfN B145 .byte 53 50 43 A8 54 48 45 CE ;spc.theN B14D .byte 4E 4F D4 53 54 45 D0 ;noTsteP ; oplist BASIC Operator Keyword Table DATA B154 .byte AB AD AA AF DE 41 4E C4 ;.....anD B15C .byte 4F D2 BE BD BC ;oR... ; funlst BASIC Function Keyword Table DATA B161 .byte 53 47 CE 49 4E D4 41 42 ;sgNinTab B169 .byte D3 55 53 D2 46 52 C5 50 ;SusRfrEp B171 .byte 4F D3 53 51 D2 52 4E C4 ;oSsqRrnD B179 .byte 4C 4F C7 45 58 D0 43 4F ;loGexPco B181 .byte D3 53 49 CE 54 41 CE 41 ;SsiNtaNa B189 .byte 54 CE 50 45 45 CB 4C 45 ;tNpeeKle B191 .byte CE 53 54 52 A4 56 41 CC ;Nstr.vaL B199 .byte 41 53 C3 43 48 52 A4 4C ;asCchr.l B1A1 .byte 45 46 54 A4 52 49 47 48 ;eft.righ B1A9 .byte 54 A4 4D 49 44 A4 47 CF ;t.mid.gO ; - Additional Action Keywords DATA B1B1 .byte 43 4F 4E 43 41 D4 44 4F ;concaTdo B1B9 .byte 50 45 CE 44 43 4C 4F 53 ;peNdclos B1C1 .byte C5 52 45 43 4F 52 C4 48 ;ErecorDh B1C9 .byte 45 41 44 45 D2 43 4F 4C ;eadeRcol B1D1 .byte 4C 45 43 D4 42 41 43 4B ;lecTback B1D9 .byte 55 D0 43 4F 50 D9 41 50 ;uPcopYap B1E1 .byte 50 45 4E C4 44 53 41 56 ;penDdsav B1E9 .byte C5 44 4C 4F 41 C4 43 41 ;EdloaDca B1F1 .byte 54 41 4C 4F C7 52 45 4E ;taloGren B1F9 .byte 41 4D C5 53 43 52 41 54 ;amEscrat B201 .byte 43 C8 44 49 52 45 43 54 ;cHdirect B209 .byte 4F 52 D9 00 ;orY. ; errtab Error Message Table DATA B20D sB20D .byte 4E 45 58 54 20 57 49 54 ;next wit B215 .byte 48 4F 55 54 20 46 4F D2 ;hout foR B21D .byte 53 59 4E 54 41 D8 52 45 ;syntaXre B225 .byte 54 55 52 4E 20 57 49 54 ;turn wit B22D .byte 48 4F 55 54 20 47 4F 53 ;hout gos B235 .byte 55 C2 4F 55 54 20 4F 46 ;uBout of B23D .byte 20 44 41 54 C1 49 4C 4C ; datAill B245 .byte 45 47 41 4C 20 51 55 41 ;egal qua B24D .byte 4E 54 49 54 D9 4F 56 45 ;ntitYove B255 .byte 52 46 4C 4F D7 4F 55 54 ;rfloWout B25D .byte 20 4F 46 20 4D 45 4D 4F ; of memo B265 .byte 52 D9 55 4E 44 45 46 27 ;rYundef' B26D .byte 44 20 53 54 41 54 45 4D ;d statem B275 .byte 45 4E D4 42 41 44 20 53 ;enTbad s B27D .byte 55 42 53 43 52 49 50 D4 ;ubscripT B285 .byte 52 45 44 49 4D 27 44 20 ;redim'd B28D .byte 41 52 52 41 D9 44 49 56 ;arraYdiv B295 .byte 49 53 49 4F 4E 20 42 59 ;ision by B29D .byte 20 5A 45 52 CF 49 4C 4C ; zerOill B2A5 .byte 45 47 41 4C 20 44 49 52 ;egal dir B2AD .byte 45 43 D4 54 59 50 45 20 ;ecTtype B2B5 .byte 4D 49 53 4D 41 54 43 C8 ;mismatcH B2BD .byte 53 54 52 49 4E 47 20 54 ;string t B2C5 .byte 4F 4F 20 4C 4F 4E C7 46 ;oo lonGf B2CD .byte 49 4C 45 20 44 41 54 C1 ;ile datA B2D5 .byte 46 4F 52 4D 55 4C 41 20 ;formula B2DD .byte 54 4F 4F 20 43 4F 4D 50 ;too comp B2E5 .byte 4C 45 D8 43 41 4E 27 54 ;leXcan't B2ED .byte 20 43 4F 4E 54 49 4E 55 ; continu B2F5 .byte C5 55 4E 44 45 46 27 44 ;Eundef'd B2FD .byte 20 46 55 4E 43 54 49 4F ; functio B305 .byte CE ;N ; okk Misc. Messages DATA B306 .byte 20 45 52 52 4F 52 00 20 ; error. B30E .byte 49 4E 20 00 0D 52 45 41 ;in ..rea B316 .byte 44 59 2E 0D 00 0D 42 52 ;dy....br B31E .byte 45 41 4B 00 ;eak. ; fndfor Find FOR/GOSUB Entry on Stack B322 iB322 TSX B323 INX B324 INX B325 INX B326 INX B327 iB327 LDA $0101,X B32A CMP #$81 B32C BNE $B34F B32E LDA $47 B330 BNE $B33C B332 LDA $0102,X B335 STA $46 ; Pointer: Index Variable for FOR/NEXT B337 LDA $0103,X B33A STA $47 B33C iB33C CMP $0103,X B33F BNE $B348 B341 LDA $46 ; Pointer: Index Variable for FOR/NEXT B343 CMP $0102,X B346 BEQ $B34F B348 iB348 TXA B349 CLC B34A ADC #$12 B34C TAX B34D BNE $B327 B34F iB34F RTS ; bltu Open Space in Memory B350 iB350 JSR $B3A0 ; reason Check Memory Overlap B353 STA $2E ; Pointer End of BASIC Arrays (+1) B355 STY $2F B357 SEC B358 LDA $57 B35A SBC $5C B35C STA $1F ; Utility Pointer Area B35E TAY B35F LDA $58 B361 SBC $5D B363 TAX B364 INX B365 TYA B366 BEQ $B38B B368 LDA $57 B36A SEC B36B SBC $1F ; Utility Pointer Area B36D STA $57 B36F BCS $B374 B371 DEC $58 B373 SEC B374 iB374 LDA $55 B376 SBC $1F ; Utility Pointer Area B378 STA $55 B37A BCS $B384 B37C DEC $56 B37E BCC $B384 B380 iB380 LDA ($57),Y B382 STA ($55),Y B384 iB384 DEY B385 BNE $B380 B387 LDA ($57),Y B389 STA ($55),Y B38B iB38B DEC $58 B38D DEC $56 B38F DEX B390 BNE $B384 B392 RTS ; getstk Check Stack Depth B393 iB393 ASL B394 ADC #$3E B396 BCS $B3CD ; omerr Output ?OUT OF MEMORY Error B398 STA $1F ; Utility Pointer Area B39A TSX B39B CPX $1F ; Utility Pointer Area B39D BCC $B3CD ; omerr Output ?OUT OF MEMORY Error B39F RTS ; reason Check Memory Overlap B3A0 iB3A0 CPY $31 B3A2 BCC $B3CC B3A4 BNE $B3AA B3A6 CMP $30 ; Pointer: Bottom of String Storage B3A8 BCC $B3CC B3AA iB3AA PHA B3AB LDX #$09 B3AD TYA B3AE iB3AE PHA B3AF LDA $54,X ; Temporary storage for FLPT value. B3B1 DEX B3B2 BPL $B3AE B3B4 JSR $C66A ; garbag Garbage Collection B3B7 LDX #$F7 B3B9 iB3B9 PLA B3BA STA $5E,X ; Floating-Point Accumulator #1: Exponent B3BC INX B3BD BMI $B3B9 B3BF PLA B3C0 TAY B3C1 PLA B3C2 CPY $31 B3C4 BCC $B3CC B3C6 BNE $B3CD ; omerr Output ?OUT OF MEMORY Error B3C8 CMP $30 ; Pointer: Bottom of String Storage B3CA BCS $B3CD ; omerr Output ?OUT OF MEMORY Error B3CC iB3CC RTS ; omerr Output ?OUT OF MEMORY Error B3CD iB3CD LDX #$4D ; error Error Routine B3CF iB3CF LDA $10 ; 3: width of source (unused - from TTY) B3D1 BEQ $B3DA B3D3 JSR $FFCC ; clrch Restore I/O Vector B3D6 LDA #$00 B3D8 STA $10 ; 3: width of source (unused - from TTY) B3DA iB3DA JSR $BADF ; crdo Output CR/LF B3DD JSR $BB44 ; -Print '?' B3E0 iB3E0 LDA $B20D,X ; errtab Error Message Table DATA B3E3 PHA B3E4 AND #$7F B3E6 JSR $BB46 ; - Output Character in A B3E9 INX B3EA PLA B3EB BPL $B3E0 B3ED iB3ED JSR $B60E B3F0 LDA #$06 B3F2 LDY #$B3 ; errfin Break Entry B3F4 iB3F4 JSR $BB1D ; strout Output String B3F7 LDY $37 B3F9 INY B3FA BEQ $B3FF ; ready Restart BASIC B3FC JSR $CF78 ; inprt Output 'IN' and Line Number ; ready Restart BASIC B3FF iB3FF LDA #$12 B401 LDY #$B3 B403 JSR $BB1D ; strout Output String ; main Input & Identify BASIC Line B406 iB406 JSR $B4E2 ; inlin Input Line Into Buffer B409 STX $77 ; Pointer: Current Byte of BASIC Text B40B STY $78 B40D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text B410 TAX B411 BEQ $B406 ; main Input & Identify BASIC Line B413 LDX #$FF B415 STX $37 B417 BCC $B41F ; main1 Get Line Number & Tokenise Text B419 JSR $B4FB ; crunch Tokenise Input Buffer B41C JMP $B77C ; gone Prepare to execute statement ; main1 Get Line Number & Tokenise Text B41F iB41F JSR $B8F6 ; linget Fetch linnum From BASIC B422 JSR $B4FB ; crunch Tokenise Input Buffer ; inslin Insert BASIC Text B425 STY $05 ; Input Buffer Pointer / No. of Subscripts B427 JSR $B5A3 ; fndlin Search for Line Number B42A BCC $B470 B42C LDY #$01 B42E LDA ($5C),Y B430 STA $20 B432 LDA $2A ; Pointer: Start of BASIC Variables B434 STA $1F ; Utility Pointer Area B436 LDA $5D B438 STA $22 B43A LDA $5C B43C DEY B43D SBC ($5C),Y B43F CLC B440 ADC $2A ; Pointer: Start of BASIC Variables B442 STA $2A ; Pointer: Start of BASIC Variables B444 STA $21 B446 LDA $2B B448 ADC #$FF B44A STA $2B B44C SBC $5D B44E TAX B44F SEC B450 LDA $5C B452 SBC $2A ; Pointer: Start of BASIC Variables B454 TAY B455 BCS $B45A B457 INX B458 DEC $22 B45A iB45A CLC B45B ADC $1F ; Utility Pointer Area B45D BCC $B462 B45F DEC $20 B461 CLC B462 iB462 LDA ($1F),Y ; Utility Pointer Area B464 STA ($21),Y B466 INY B467 BNE $B462 B469 INC $20 B46B INC $22 B46D DEX B46E BNE $B462 B470 iB470 JSR $B5E9 B473 JSR $B4B6 ; linkprg Rechain Lines B476 LDA $0200 ; System INPUT Buffer B479 BEQ $B406 ; main Input & Identify BASIC Line B47B CLC B47C LDA $2A ; Pointer: Start of BASIC Variables B47E STA $57 B480 ADC $05 ; Input Buffer Pointer / No. of Subscripts B482 STA $55 B484 LDY $2B B486 STY $58 B488 BCC $B48B B48A INY B48B iB48B STY $56 B48D JSR $B350 ; bltu Open Space in Memory B490 LDA $11 ; Temp: Integer Value B492 LDY $12 B494 STA $01FE B497 STY $01FF B49A LDA $2E ; Pointer End of BASIC Arrays (+1) B49C LDY $2F B49E STA $2A ; Pointer: Start of BASIC Variables B4A0 STY $2B B4A2 LDY $05 ; Input Buffer Pointer / No. of Subscripts B4A4 DEY B4A5 iB4A5 LDA $01FC,Y B4A8 STA ($5C),Y B4AA DEY B4AB BPL $B4A5 B4AD iB4AD JSR $B5E9 B4B0 JSR $B4B6 ; linkprg Rechain Lines B4B3 JMP $B406 ; main Input & Identify BASIC Line ; linkprg Rechain Lines B4B6 iB4B6 LDA $28 ; Pointer: Start of BASIC Text [0401] B4B8 LDY $29 B4BA STA $1F ; Utility Pointer Area B4BC STY $20 B4BE CLC B4BF iB4BF LDY #$01 B4C1 LDA ($1F),Y ; Utility Pointer Area B4C3 BEQ $B4E1 B4C5 LDY #$04 B4C7 iB4C7 INY B4C8 LDA ($1F),Y ; Utility Pointer Area B4CA BNE $B4C7 B4CC INY B4CD TYA B4CE ADC $1F ; Utility Pointer Area B4D0 TAX B4D1 LDY #$00 B4D3 STA ($1F),Y ; Utility Pointer Area B4D5 TYA B4D6 ADC $20 B4D8 INY B4D9 STA ($1F),Y ; Utility Pointer Area B4DB STX $1F ; Utility Pointer Area B4DD STA $20 B4DF BCC $B4BF B4E1 iB4E1 RTS ; inlin Input Line Into Buffer B4E2 iB4E2 LDX #$00 B4E4 iB4E4 JSR $FFCF ; chrin Input Vector, chrin B4E7 CMP #$0D B4E9 BEQ $B4F8 B4EB STA $0200,X ; System INPUT Buffer B4EE INX B4EF CPX #$51 B4F1 BNE $B4E4 B4F3 LDX #$B0 B4F5 JMP $B3CF ; error Error Routine B4F8 iB4F8 JMP $BAD2 ; - Add zero terminator to string ; crunch Tokenise Input Buffer B4FB iB4FB LDX $77 ; Pointer: Current Byte of BASIC Text B4FD LDY #$04 B4FF STY $09 ; Flag: DATA scan/LlST quote/Garbage Coll B501 iB501 LDA $0200,X ; System INPUT Buffer B504 BPL $B50D B506 CMP #$FF B508 BEQ $B554 B50A INX B50B BNE $B501 B50D iB50D CMP #$20 B50F BEQ $B554 B511 STA $04 ; Flag: Scan for Quote at End of String B513 CMP #$22 B515 BEQ $B579 B517 BIT $09 B519 BVS $B554 B51B CMP #$3F B51D BNE $B523 B51F LDA #$99 B521 BNE $B554 B523 iB523 CMP #$30 B525 BCC $B52B B527 CMP #$3C B529 BCC $B554 B52B iB52B STY $6E ; Pointer: Cassette Buffer B52D LDY #$00 B52F STY $05 ; Input Buffer Pointer / No. of Subscripts B531 STX $77 ; Pointer: Current Byte of BASIC Text B533 LDA #$B0 B535 STA $20 B537 LDA #$B2 B539 STA $1F ; Utility Pointer Area B53B BNE $B544 B53D iB53D INX B53E INC $1F ; Utility Pointer Area B540 BNE $B544 B542 INC $20 B544 iB544 LDA $0200,X ; System INPUT Buffer B547 SEC B548 SBC ($1F),Y ; Utility Pointer Area B54A BEQ $B53D B54C CMP #$80 B54E BNE $B580 B550 ORA $05 ; Input Buffer Pointer / No. of Subscripts B552 iB552 LDY $6E ; Pointer: Cassette Buffer B554 iB554 INX B555 INY B556 STA $01FB,Y B559 LDA $01FB,Y B55C BEQ $B599 B55E SEC B55F SBC #$3A B561 BEQ $B567 B563 CMP #$49 B565 BNE $B569 B567 iB567 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll B569 iB569 SEC B56A SBC #$55 B56C BNE $B501 B56E STA $04 ; Flag: Scan for Quote at End of String B570 iB570 LDA $0200,X ; System INPUT Buffer B573 BEQ $B554 B575 CMP $04 ; Flag: Scan for Quote at End of String B577 BEQ $B554 B579 iB579 INY B57A STA $01FB,Y B57D INX B57E BNE $B570 B580 iB580 LDX $77 ; Pointer: Current Byte of BASIC Text B582 INC $05 ; Input Buffer Pointer / No. of Subscripts B584 iB584 LDA ($1F),Y ; Utility Pointer Area B586 PHP B587 INC $1F ; Utility Pointer Area B589 BNE $B58D B58B INC $20 B58D iB58D PLP B58E BPL $B584 B590 LDA ($1F),Y ; Utility Pointer Area B592 BNE $B544 B594 LDA $0200,X ; System INPUT Buffer B597 BPL $B552 B599 iB599 STA $01FD,Y B59C DEC $78 B59E LDA #$FF B5A0 STA $77 ; Pointer: Current Byte of BASIC Text B5A2 RTS ; fndlin Search for Line Number B5A3 iB5A3 LDA $28 ; Pointer: Start of BASIC Text [0401] B5A5 LDX $29 B5A7 iB5A7 LDY #$01 B5A9 STA $5C B5AB STX $5D B5AD LDA ($5C),Y B5AF BEQ $B5D0 B5B1 INY B5B2 INY B5B3 LDA $12 B5B5 CMP ($5C),Y B5B7 BCC $B5D1 B5B9 BEQ $B5BE B5BB DEY B5BC BNE $B5C7 B5BE iB5BE LDA $11 ; Temp: Integer Value B5C0 DEY B5C1 CMP ($5C),Y B5C3 BCC $B5D1 B5C5 BEQ $B5D1 B5C7 iB5C7 DEY B5C8 LDA ($5C),Y B5CA TAX B5CB DEY B5CC LDA ($5C),Y B5CE BCS $B5A7 B5D0 iB5D0 CLC B5D1 iB5D1 RTS ; scrtch Perform [new] B5D2 BNE $B5D1 B5D4 iB5D4 LDA #$00 B5D6 TAY B5D7 STA ($28),Y ; Pointer: Start of BASIC Text [0401] B5D9 INY B5DA STA ($28),Y ; Pointer: Start of BASIC Text [0401] B5DC LDA $28 ; Pointer: Start of BASIC Text [0401] B5DE CLC B5DF ADC #$02 B5E1 STA $2A ; Pointer: Start of BASIC Variables B5E3 LDA $29 B5E5 ADC #$00 B5E7 STA $2B B5E9 iB5E9 JSR $B622 ; stxpt Reset TXTPTR B5EC LDA #$00 ; clear Perform [clr] B5EE BNE $B621 B5F0 iB5F0 LDA $34 ; Pointer: Highest Address Used by BASIC B5F2 LDY $35 B5F4 STA $30 ; Pointer: Bottom of String Storage B5F6 STY $31 B5F8 LDA #$00 B5FA STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve B5FC JSR $FFE7 ; jmp $f2a2 clall Close All Channels And Files B5FF LDA $2A ; Pointer: Start of BASIC Variables B601 LDY $2B B603 STA $2C ; Pointer: Start of BASIC Arrays B605 STY $2D B607 STA $2E ; Pointer End of BASIC Arrays (+1) B609 STY $2F B60B iB60B JSR $B7B7 ; restor Perform [restore] B60E iB60E LDX #$16 B610 STX $13 ; Pointer Temporary String B612 PLA B613 TAY B614 PLA B615 LDX #$FA B617 TXS B618 PHA B619 TYA B61A PHA B61B LDA #$00 B61D STA $3B B61F STA $0A ; Flag: Subscript Ref / User Function Call B621 iB621 RTS ; stxpt Reset TXTPTR B622 iB622 CLC B623 LDA $28 ; Pointer: Start of BASIC Text [0401] B625 ADC #$FF B627 STA $77 ; Pointer: Current Byte of BASIC Text B629 LDA $29 B62B ADC #$FF B62D STA $78 B62F RTS ; list Perform [list] B630 BCC $B638 B632 BEQ $B638 B634 CMP #$AB B636 BNE $B621 B638 iB638 JSR $B8F6 ; linget Fetch linnum From BASIC B63B JSR $B5A3 ; fndlin Search for Line Number B63E JSR $0076 ; Entry to Get Same Byte of Text Again B641 BEQ $B64F B643 CMP #$AB B645 BNE $B5D1 B647 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text B64A JSR $B8F6 ; linget Fetch linnum From BASIC B64D BNE $B5D1 B64F iB64F PLA B650 PLA B651 LDA $11 ; Temp: Integer Value B653 ORA $12 B655 BNE $B65D B657 LDA #$FF B659 STA $11 ; Temp: Integer Value B65B STA $12 B65D iB65D LDY #$01 B65F STY $09 ; Flag: DATA scan/LlST quote/Garbage Coll B661 LDA ($5C),Y B663 BEQ $B6A8 B665 JSR $FFE1 ; jmp $f343 stop Test-Stop B668 JSR $BADF ; crdo Output CR/LF B66B INY B66C LDA ($5C),Y B66E TAX B66F INY B670 LDA ($5C),Y B672 CMP $12 B674 BNE $B67A B676 CPX $11 ; Temp: Integer Value B678 BEQ $B67C B67A iB67A BCS $B6A8 B67C iB67C STY $46 ; Pointer: Index Variable for FOR/NEXT B67E JSR $CF83 B681 LDA #$20 B683 iB683 LDY $46 ; Pointer: Index Variable for FOR/NEXT B685 AND #$7F B687 iB687 JSR $BB46 ; - Output Character in A B68A CMP #$22 B68C BNE $B694 B68E LDA $09 ; Flag: DATA scan/LlST quote/Garbage Coll B690 EOR #$FF B692 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll B694 iB694 INY B695 BEQ $B6A8 B697 LDA ($5C),Y B699 BNE $B6AB ; qplop Handle LIST Character B69B TAY B69C LDA ($5C),Y B69E TAX B69F INY B6A0 LDA ($5C),Y B6A2 STX $5C B6A4 STA $5D B6A6 BNE $B65D B6A8 iB6A8 JMP $B3FF ; ready Restart BASIC ; qplop Handle LIST Character B6AB iB6AB BPL $B687 B6AD CMP #$FF B6AF BEQ $B687 B6B1 BIT $09 B6B3 BMI $B687 B6B5 TAX B6B6 STY $46 ; Pointer: Index Variable for FOR/NEXT B6B8 LDY #$B0 B6BA STY $20 B6BC LDY #$B2 B6BE STY $1F ; Utility Pointer Area B6C0 LDY #$00 B6C2 ASL B6C3 BEQ $B6D5 B6C5 iB6C5 DEX B6C6 BPL $B6D4 B6C8 iB6C8 INC $1F ; Utility Pointer Area B6CA BNE $B6CE B6CC INC $20 B6CE iB6CE LDA ($1F),Y ; Utility Pointer Area B6D0 BPL $B6C8 B6D2 BMI $B6C5 B6D4 iB6D4 INY B6D5 iB6D5 LDA ($1F),Y ; Utility Pointer Area B6D7 BMI $B683 B6D9 JSR $BB46 ; - Output Character in A B6DC BNE $B6D4 ; for Perform [for] B6DE LDA #$80 B6E0 STA $0A ; Flag: Subscript Ref / User Function Call B6E2 JSR $B930 ; let Perform [let] B6E5 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack B6E8 BNE $B6EF B6EA TXA B6EB ADC #$0F B6ED TAX B6EE TXS B6EF iB6EF PLA B6F0 PLA B6F1 LDA #$09 B6F3 JSR $B393 ; getstk Check Stack Depth B6F6 JSR $B891 ; datan Search for Next Statement / Line B6F9 CLC B6FA TYA B6FB ADC $77 ; Pointer: Current Byte of BASIC Text B6FD PHA B6FE LDA $78 B700 ADC #$00 B702 PHA B703 LDA $37 B705 PHA B706 LDA $36 ; Current BASIC Line Number B708 PHA B709 LDA #$A4 B70B JSR $BEF7 ; -Confirm Character in A B70E JSR $BD87 ; -Confirm numeric mode B711 JSR $BD84 ; frmnum Confirm Result B714 LDA $63 ; Floating Accum. #1: Sign B716 ORA #$7F B718 AND $5F ; Floating Accum. #1: Mantissa B71A STA $5F ; Floating Accum. #1: Mantissa B71C LDA #$27 B71E LDY #$B7 B720 STA $1F ; Utility Pointer Area B722 STY $20 B724 JMP $BE41 B727 LDA #$F2 B729 LDY #$CA B72B JSR $CCD8 ; movfm Load FAC#1 From Memory B72E JSR $0076 ; Entry to Get Same Byte of Text Again B731 CMP #$A9 B733 BNE $B73B B735 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text B738 JSR $BD84 ; frmnum Confirm Result B73B iB73B JSR $CD61 ; sign Check Sign of FAC#1 B73E JSR $BE32 B741 LDA $47 B743 PHA B744 LDA $46 ; Pointer: Index Variable for FOR/NEXT B746 PHA B747 LDA #$81 B749 PHA ; newstt BASIC Warm Start B74A iB74A JSR $FFE1 ; jmp $f343 stop Test-Stop B74D LDA $77 ; Pointer: Current Byte of BASIC Text B74F LDY $78 B751 CPY #$02 B753 BEQ $B759 B755 STA $3A ; Pointer: BASIC Statement for CONT B757 STY $3B B759 iB759 LDY #$00 B75B LDA ($77),Y ; Pointer: Current Byte of BASIC Text B75D BNE $B7A5 ; ckeol Check End of Program B75F LDY #$02 B761 LDA ($77),Y ; Pointer: Current Byte of BASIC Text B763 CLC B764 BNE $B769 B766 JMP $B7E2 B769 iB769 INY B76A LDA ($77),Y ; Pointer: Current Byte of BASIC Text B76C STA $36 ; Current BASIC Line Number B76E INY B76F LDA ($77),Y ; Pointer: Current Byte of BASIC Text B771 STA $37 B773 TYA B774 ADC $77 ; Pointer: Current Byte of BASIC Text B776 STA $77 ; Pointer: Current Byte of BASIC Text B778 BCC $B77C ; gone Prepare to execute statement B77A INC $78 ; gone Prepare to execute statement B77C iB77C JSR $BF21 ; ? B77F JSR $B785 ; gone3 Perform BASIC Keyword B782 JMP $B74A ; newstt BASIC Warm Start ; gone3 Perform BASIC Keyword B785 iB785 BEQ $B7C5 B787 iB787 SBC #$80 B789 BCC $B7A2 B78B CMP #$23 B78D BCC $B795 B78F CMP #$4B B791 BCC $B7A9 B793 SBC #$28 B795 iB795 ASL B796 TAY B797 LDA $B001,Y B79A PHA B79B LDA $B000,Y ; 3: free space for 4K EPROM B79E PHA B79F JMP $0070 ; Subroutine: Get Next Byte of BASIC Text B7A2 iB7A2 JMP $B930 ; let Perform [let] B7A5 iB7A5 CMP #$3A ; - Perform [go] B7A7 BEQ $B77C ; gone Prepare to execute statement B7A9 iB7A9 JMP $BF00 ; synerr Output ?SYNTAX Error B7AC JSR $0076 ; Entry to Get Same Byte of Text Again B7AF LDA #$A4 B7B1 JSR $BEF7 ; -Confirm Character in A B7B4 JMP $B830 ; goto Perform [goto] ; restor Perform [restore] B7B7 iB7B7 SEC B7B8 LDA $28 ; Pointer: Start of BASIC Text [0401] B7BA SBC #$01 B7BC LDY $29 B7BE BCS $B7C1 B7C0 DEY B7C1 iB7C1 STA $3E ; Pointer: Current DATA Item Address B7C3 STY $3F B7C5 iB7C5 RTS ; stop Perform [stop], [end], break B7C6 iB7C6 BCS $B7C9 B7C8 CLC B7C9 iB7C9 BNE $B807 B7CB LDA $77 ; Pointer: Current Byte of BASIC Text B7CD LDY $78 B7CF LDX $37 B7D1 INX B7D2 BEQ $B7E0 B7D4 STA $3A ; Pointer: BASIC Statement for CONT B7D6 STY $3B B7D8 iB7D8 LDA $36 ; Current BASIC Line Number B7DA LDY $37 B7DC STA $38 ; Previous BASIC Line Number B7DE STY $39 B7E0 iB7E0 PLA B7E1 PLA B7E2 iB7E2 LDA #$1B B7E4 LDY #$B3 B7E6 BCC $B7EB B7E8 JMP $B3F4 ; errfin Break Entry B7EB iB7EB JMP $B3FF ; ready Restart BASIC ; cont Perform [cont] B7EE BNE $B807 B7F0 LDX #$DB B7F2 LDY $3B B7F4 BNE $B7F9 B7F6 JMP $B3CF ; error Error Routine B7F9 iB7F9 LDA $3A ; Pointer: BASIC Statement for CONT B7FB STA $77 ; Pointer: Current Byte of BASIC Text B7FD STY $78 B7FF LDA $38 ; Previous BASIC Line Number B801 LDY $39 B803 STA $36 ; Current BASIC Line Number B805 STY $37 B807 iB807 RTS ; run Perform [run] B808 BNE $B80D B80A JMP $B5E9 B80D iB80D JSR $B5F0 B810 JMP $B827 ; gosub Perform [gosub] B813 LDA #$03 B815 JSR $B393 ; getstk Check Stack Depth B818 LDA $78 B81A PHA B81B LDA $77 ; Pointer: Current Byte of BASIC Text B81D PHA B81E LDA $37 B820 PHA B821 LDA $36 ; Current BASIC Line Number B823 PHA B824 LDA #$8D B826 PHA B827 iB827 JSR $0076 ; Entry to Get Same Byte of Text Again B82A JSR $B830 ; goto Perform [goto] B82D JMP $B74A ; newstt BASIC Warm Start ; goto Perform [goto] B830 iB830 JSR $B8F6 ; linget Fetch linnum From BASIC B833 JSR $B894 B836 LDA $37 B838 CMP $12 B83A BCS $B847 B83C TYA B83D SEC B83E ADC $77 ; Pointer: Current Byte of BASIC Text B840 LDX $78 B842 BCC $B84B B844 INX B845 BCS $B84B B847 iB847 LDA $28 ; Pointer: Start of BASIC Text [0401] B849 LDX $29 B84B iB84B JSR $B5A7 B84E BCC $B86E B850 LDA $5C B852 SBC #$01 B854 STA $77 ; Pointer: Current Byte of BASIC Text B856 LDA $5D B858 SBC #$00 B85A STA $78 B85C iB85C RTS ; return Perform [return] B85D BNE $B85C B85F LDA #$FF B861 STA $47 B863 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack B866 TXS B867 CMP #$8D B869 BEQ $B876 B86B LDX #$16 B86D BIT $5AA2 ; *** B86D: ADDRESS DIFFER. This may indicate misassembly *** B870 JMP $B3CF ; error Error Routine B873 iB873 JMP $BF00 ; synerr Output ?SYNTAX Error B876 iB876 PLA B877 PLA B878 STA $36 ; Current BASIC Line Number B87A PLA B87B STA $37 B87D PLA B87E STA $77 ; Pointer: Current Byte of BASIC Text B880 PLA B881 STA $78 ; data Perform [data] B883 iB883 JSR $B891 ; datan Search for Next Statement / Line B886 iB886 TYA B887 CLC B888 ADC $77 ; Pointer: Current Byte of BASIC Text B88A STA $77 ; Pointer: Current Byte of BASIC Text B88C BCC $B890 B88E INC $78 B890 iB890 RTS ; datan Search for Next Statement / Line B891 iB891 LDX #$3A B893 BIT $00A2 ; *** B893: ADDRESS DIFFER. This may indicate misassembly *** B896 STX $03 ; Search Character B898 LDY #$00 B89A STY $04 ; Flag: Scan for Quote at End of String B89C iB89C LDA $04 ; Flag: Scan for Quote at End of String B89E LDX $03 ; Search Character B8A0 STA $03 ; Search Character B8A2 STX $04 ; Flag: Scan for Quote at End of String B8A4 iB8A4 LDA ($77),Y ; Pointer: Current Byte of BASIC Text B8A6 BEQ $B890 B8A8 CMP $04 ; Flag: Scan for Quote at End of String B8AA BEQ $B890 B8AC INY B8AD CMP #$22 B8AF BNE $B8A4 B8B1 BEQ $B89C ; if Perform [if] B8B3 JSR $BD98 ; frmevl Evaluate Expression in Text B8B6 JSR $0076 ; Entry to Get Same Byte of Text Again B8B9 CMP #$89 B8BB BEQ $B8C2 B8BD LDA #$A7 B8BF JSR $BEF7 ; -Confirm Character in A B8C2 iB8C2 LDA $5E ; Floating-Point Accumulator #1: Exponent B8C4 BNE $B8CB ; rem Perform [rem] B8C6 JSR $B894 B8C9 BEQ $B886 B8CB iB8CB JSR $0076 ; Entry to Get Same Byte of Text Again B8CE BCS $B8D3 B8D0 JMP $B830 ; goto Perform [goto] B8D3 iB8D3 JMP $B785 ; gone3 Perform BASIC Keyword ; ongoto Perform [on] B8D6 JSR $C8D4 ; -Eval Byte Parameter B8D9 PHA B8DA CMP #$8D B8DC BEQ $B8E2 B8DE iB8DE CMP #$89 B8E0 BNE $B873 B8E2 iB8E2 DEC $62 B8E4 BNE $B8EA B8E6 PLA B8E7 JMP $B787 B8EA iB8EA JSR $0070 ; Subroutine: Get Next Byte of BASIC Text B8ED JSR $B8F6 ; linget Fetch linnum From BASIC B8F0 CMP #$2C B8F2 BEQ $B8E2 B8F4 PLA B8F5 iB8F5 RTS ; linget Fetch linnum From BASIC B8F6 iB8F6 LDX #$00 B8F8 STX $11 ; Temp: Integer Value B8FA STX $12 B8FC iB8FC BCS $B8F5 B8FE SBC #$2F B900 STA $03 ; Search Character B902 LDA $12 B904 STA $1F ; Utility Pointer Area B906 CMP #$19 B908 BCS $B8DE B90A LDA $11 ; Temp: Integer Value B90C ASL B90D ROL $1F ; Utility Pointer Area B90F ASL B910 ROL $1F ; Utility Pointer Area B912 ADC $11 ; Temp: Integer Value B914 STA $11 ; Temp: Integer Value B916 LDA $1F ; Utility Pointer Area B918 ADC $12 B91A STA $12 B91C ASL $11 ; Temp: Integer Value B91E ROL $12 B920 LDA $11 ; Temp: Integer Value B922 ADC $03 ; Search Character B924 STA $11 ; Temp: Integer Value B926 BCC $B92A B928 INC $12 B92A iB92A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text B92D JMP $B8FC ; let Perform [let] B930 iB930 JSR $C12B ; ptrget Identify Variable B933 STA $46 ; Pointer: Index Variable for FOR/NEXT B935 STY $47 B937 LDA #$B2 B939 JSR $BEF7 ; -Confirm Character in A B93C LDA $08 ; Data Type: $80 = Integer, $00 = Floating B93E PHA B93F LDA $07 ; Data Type: $FF = String, $00 = Numeric B941 PHA B942 JSR $BD98 ; frmevl Evaluate Expression in Text B945 PLA B946 ROL B947 JSR $BD8A B94A BNE $B964 ; putstr Assign String B94C PLA B94D iB94D BPL $B961 ; ptflpt Assign Floating Point ; putint Assign Integer B94F JSR $CD51 ; round Round FAC#1 B952 JSR $C2EA ; ayint FAC#1 to Positive Integer B955 LDY #$00 B957 LDA $61 B959 STA ($46),Y ; Pointer: Index Variable for FOR/NEXT B95B INY B95C LDA $62 B95E STA ($46),Y ; Pointer: Index Variable for FOR/NEXT B960 RTS ; ptflpt Assign Floating Point B961 iB961 JMP $CD06 ; putstr Assign String B964 iB964 PLA B965 iB965 LDY $47 B967 CPY #$D0 B969 BNE $B9BA ; getspt Add Digit to FAC#1 B96B JSR $C7B8 ; puttim Assign TI$ B96E CMP #$06 B970 BNE $B9B2 B972 LDY #$00 B974 STY $5E ; Floating-Point Accumulator #1: Exponent B976 STY $63 ; Floating Accum. #1: Sign B978 iB978 STY $6E ; Pointer: Cassette Buffer B97A JSR $B9AB ; -get character string B97D JSR $CC18 ; mul10 Multiply FAC#1 by 10 B980 INC $6E ; Pointer: Cassette Buffer B982 LDY $6E ; Pointer: Cassette Buffer B984 JSR $B9AB ; -get character string B987 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 B98A TAX B98B BEQ $B992 B98D INX B98E TXA B98F JSR $CC23 B992 iB992 LDY $6E ; Pointer: Cassette Buffer B994 INY B995 CPY #$06 B997 BNE $B978 B999 JSR $CC18 ; mul10 Multiply FAC#1 by 10 B99C JSR $CDD1 ; qint Convert FAC#1 to Integer B99F LDX #$02 B9A1 SEI B9A2 iB9A2 LDA $60,X B9A4 STA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec B9A6 DEX B9A7 BPL $B9A2 B9A9 CLI B9AA RTS ; -get character string B9AB iB9AB LDA ($1F),Y ; Utility Pointer Area B9AD JSR $007D B9B0 BCC $B9B5 B9B2 iB9B2 JMP $C373 ; - ?ILLEGAL QUANTITY B9B5 iB9B5 SBC #$2F B9B7 JMP $CEB4 ; getspt Add Digit to FAC#1 B9BA iB9BA LDY #$02 B9BC LDA ($61),Y B9BE CMP $0F ; 3: terminal width (unused-carried over from TTY) B9C0 BNE $B9D4 B9C2 PHA B9C3 DEY B9C4 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve B9C6 BEQ $B9D2 B9C8 LDA ($61),Y B9CA CMP $0E ; 3: File# of current I/O device (as 0010) B9CC BNE $B9D2 B9CE PLA B9CF JMP $B9F6 B9D2 iB9D2 PLA B9D3 INY B9D4 iB9D4 CMP $31 B9D6 BCC $B9EF B9D8 BNE $B9E1 B9DA DEY B9DB LDA ($61),Y B9DD CMP $30 ; Pointer: Bottom of String Storage B9DF BCC $B9EF B9E1 iB9E1 LDY $62 B9E3 CPY $2B B9E5 BCC $B9EF B9E7 BNE $B9F6 B9E9 LDA $61 B9EB CMP $2A ; Pointer: Start of BASIC Variables B9ED BCS $B9F6 B9EF iB9EF LDA $61 B9F1 LDY $62 B9F3 JMP $BA13 B9F6 iB9F6 LDY #$00 B9F8 LDA ($61),Y B9FA JSR $C59E B9FD LDA $4D ; Pointer to string, length and garbage collect constant B9FF LDY $4E BA01 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 BA03 STY $6D ; Floating Accum. #1. Low-Order (Rounding) BA05 JSR $C78C ; movins Store String in High RAM BA08 LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2 BA0A LDY $6D ; Floating Accum. #1. Low-Order (Rounding) BA0C JSR $C811 ; frefac Clean Descriptor Stack BA0F LDA #$5E BA11 LDY #$00 BA13 iBA13 STA $4D ; Pointer to string, length and garbage collect constant BA15 STY $4E BA17 STA $1F ; Utility Pointer Area BA19 STY $20 BA1B JSR $C811 ; frefac Clean Descriptor Stack BA1E JSR $BA4E ; ? BA21 BCC $BA2E BA23 LDY #$00 BA25 LDA $46 ; Pointer: Index Variable for FOR/NEXT BA27 STA ($1F),Y ; Utility Pointer Area BA29 INY BA2A LDA $47 BA2C STA ($1F),Y ; Utility Pointer Area BA2E iBA2E LDA $46 ; Pointer: Index Variable for FOR/NEXT BA30 STA $1F ; Utility Pointer Area BA32 LDA $47 BA34 STA $20 BA36 JSR $BA4E ; ? BA39 BCC $BA44 BA3B DEY BA3C LDA #$FF BA3E STA ($1F),Y ; Utility Pointer Area BA40 DEY BA41 TXA BA42 STA ($1F),Y ; Utility Pointer Area BA44 iBA44 LDY #$02 BA46 iBA46 LDA ($4D),Y ; Pointer to string, length and garbage collect constant BA48 STA ($46),Y ; Pointer: Index Variable for FOR/NEXT BA4A DEY BA4B BPL $BA46 BA4D RTS ; ? BA4E iBA4E LDY #$00 BA50 LDA ($1F),Y ; Utility Pointer Area BA52 PHA BA53 BEQ $BA85 BA55 INY BA56 LDA ($1F),Y ; Utility Pointer Area BA58 TAX BA59 INY BA5A LDA ($1F),Y ; Utility Pointer Area BA5C BMI $BA85 BA5E CMP #$B0 BA60 BCS $BA85 BA62 CMP $31 BA64 BCC $BA85 BA66 BNE $BA6C BA68 CPX $30 ; Pointer: Bottom of String Storage BA6A BCC $BA85 BA6C iBA6C JMP $BF10 BA6F NOP BA70 iBA70 CPX $0E ; 3: File# of current I/O device (as 0010) BA72 BEQ $BA85 BA74 iBA74 STX $1F ; Utility Pointer Area BA76 STA $20 BA78 PLA BA79 TAX BA7A CLC BA7B ADC $1F ; Utility Pointer Area BA7D STA $1F ; Utility Pointer Area BA7F BCC $BA83 BA81 INC $20 BA83 iBA83 SEC BA84 RTS BA85 iBA85 PLA BA86 CLC BA87 RTS ; printn Perform [print#] BA88 JSR $BA8E ; cmd Perform [cmd] BA8B JMP $BBB4 ; cmd Perform [cmd] BA8E iBA8E JSR $C8D4 ; -Eval Byte Parameter BA91 BEQ $BA98 BA93 LDA #$2C BA95 JSR $BEF7 ; -Confirm Character in A BA98 iBA98 PHP BA99 JSR $FFC9 ; chkout Set Output BA9C STX $10 ; 3: width of source (unused - from TTY) BA9E PLP BA9F JMP $BAA8 ; print Perform [print] ; strdon Print String From Memory BAA2 iBAA2 JSR $BB20 BAA5 iBAA5 JSR $0076 ; Entry to Get Same Byte of Text Again ; print Perform [print] BAA8 iBAA8 BEQ $BADF ; crdo Output CR/LF BAAA iBAAA BEQ $BAEF BAAC CMP #$A3 BAAE BEQ $BAFD BAB0 CMP #$A6 BAB2 CLC BAB3 BEQ $BAFD BAB5 CMP #$2C BAB7 BEQ $BAF0 ; comprt Handle comma, TAB(, SPC( BAB9 CMP #$3B BABB BEQ $BB12 BABD JSR $BD98 ; frmevl Evaluate Expression in Text ; varop Output Variable BAC0 BIT $07 BAC2 BMI $BAA2 ; strdon Print String From Memory BAC4 JSR $CF93 ; fout Convert FAC#1 to ASCII String BAC7 JSR $C5B0 ; strlit Set Up String BACA JSR $BB20 BACD JSR $BB3A ; outspc Output Format Character BAD0 BNE $BAA5 ; - Add zero terminator to string BAD2 iBAD2 LDA #$00 BAD4 STA $0200,X ; System INPUT Buffer BAD7 LDX #$FF BAD9 LDY #$01 BADB LDA $10 ; 3: width of source (unused - from TTY) BADD BNE $BAEF ; crdo Output CR/LF BADF iBADF LDA #$0D BAE1 JSR $BB46 ; - Output Character in A BAE4 LDA $10 ; 3: width of source (unused - from TTY) BAE6 BPL $BAED BAE8 LDA #$0A BAEA JSR $BB46 ; - Output Character in A BAED iBAED EOR #$FF BAEF iBAEF RTS ; comprt Handle comma, TAB(, SPC( BAF0 iBAF0 LDA $C6 ; Cursor Column on Current Line BAF2 SEC BAF3 iBAF3 SBC #$0A BAF5 BCS $BAF3 BAF7 EOR #$FF BAF9 ADC #$01 BAFB BNE $BB0D BAFD iBAFD PHP BAFE JSR $C8D1 ; gtbytc Evaluate Text to 1 Byte in XR BB01 CMP #$29 BB03 BNE $BB5E BB05 PLP BB06 BCC $BB0E BB08 TXA BB09 SBC $C6 ; Cursor Column on Current Line BB0B BCC $BB12 BB0D iBB0D TAX BB0E iBB0E INX BB0F iBB0F DEX BB10 BNE $BB18 BB12 iBB12 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BB15 JMP $BAAA BB18 iBB18 JSR $BB3A ; outspc Output Format Character BB1B BNE $BB0F ; strout Output String BB1D iBB1D JSR $C5B0 ; strlit Set Up String BB20 iBB20 JSR $C7B8 BB23 TAX BB24 LDY #$00 BB26 INX BB27 iBB27 DEX BB28 BEQ $BAEF BB2A LDA ($1F),Y ; Utility Pointer Area BB2C JSR $BB46 ; - Output Character in A BB2F INY BB30 CMP #$0D BB32 BNE $BB27 BB34 JSR $BAED BB37 JMP $BB27 ; outspc Output Format Character BB3A iBB3A LDA $10 ; 3: width of source (unused - from TTY) BB3C BEQ $BB41 ; -Print '' BB3E LDA #$20 BB40 BIT $1DA9 ; *** Resyncing *** ; -Print '' BB41 iBB41 LDA #$1D BB43 BIT $3FA9 ; *** Resyncing *** ; -Print '?' BB44 iBB44 LDA #$3F ; - Output Character in A BB46 iBB46 JSR $FFD2 ; chrout Output Vector, chrout BB49 AND #$FF BB4B RTS ; doagin Handle Bad Data BB4C iBB4C LDA $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ BB4E BEQ $BB61 BB50 BMI $BB56 BB52 LDY #$FF BB54 BNE $BB5A BB56 iBB56 LDA $3C ; Current DATA Line Number BB58 LDY $3D BB5A iBB5A STA $36 ; Current BASIC Line Number BB5C STY $37 BB5E iBB5E JMP $BF00 ; synerr Output ?SYNTAX Error BB61 iBB61 LDA $10 ; 3: width of source (unused - from TTY) BB63 BEQ $BB6A BB65 LDX #$BF BB67 JMP $B3CF ; error Error Routine BB6A iBB6A LDA #$07 BB6C LDY #$BD BB6E JSR $BB1D ; strout Output String BB71 LDA $3A ; Pointer: BASIC Statement for CONT BB73 LDY $3B BB75 STA $77 ; Pointer: Current Byte of BASIC Text BB77 STY $78 BB79 RTS ; get Perform [get] BB7A JSR $C4CF ; errdir Confirm Program Mode BB7D CMP #$23 BB7F BNE $BB91 BB81 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BB84 JSR $C8D4 ; -Eval Byte Parameter BB87 LDA #$2C BB89 JSR $BEF7 ; -Confirm Character in A BB8C JSR $FFC6 ; chkin Set Input BB8F STX $10 ; 3: width of source (unused - from TTY) BB91 iBB91 LDX #$01 BB93 LDY #$02 BB95 LDA #$00 BB97 STA $0201 BB9A LDA #$40 BB9C JSR $BC0B BB9F LDX $10 ; 3: width of source (unused - from TTY) BBA1 BNE $BBB6 BBA3 RTS ; inputn Perform [input#] BBA4 JSR $C8D4 ; -Eval Byte Parameter BBA7 LDA #$2C BBA9 JSR $BEF7 ; -Confirm Character in A BBAC JSR $FFC6 ; chkin Set Input BBAF STX $10 ; 3: width of source (unused - from TTY) BBB1 JSR $BBCD BBB4 iBBB4 LDA $10 ; 3: width of source (unused - from TTY) BBB6 iBBB6 JSR $FFCC ; clrch Restore I/O Vector BBB9 LDX #$00 BBBB STX $10 ; 3: width of source (unused - from TTY) BBBD RTS ; input Perform [input] BBBE CMP #$22 BBC0 BNE $BBCD BBC2 JSR $BEB5 BBC5 LDA #$3B BBC7 JSR $BEF7 ; -Confirm Character in A BBCA JSR $BB20 BBCD iBBCD JSR $C4CF ; errdir Confirm Program Mode BBD0 LDA #$2C BBD2 STA $01FF BBD5 iBBD5 JSR $BBF5 ; qinlin Do Input Prompt BBD8 LDA $10 ; 3: width of source (unused - from TTY) BBDA BEQ $BBE8 ; bufful Read Input Buffer BBDC LDA $96 ; Kernal I/O Status Word: ST BBDE AND #$03 BBE0 BEQ $BBE8 ; bufful Read Input Buffer BBE2 JSR $BBB4 BBE5 JMP $B883 ; data Perform [data] ; bufful Read Input Buffer ; Bufful scans for a null input and calls DATA to skip to the next statement ; On old PETs, END was called, thereby crashing the program. BBE8 iBBE8 LDA $0200 ; System INPUT Buffer BBEB BNE $BC09 BBED JMP $BF2E ; Patch for [input] BBF0 NOP BBF1 iBBF1 CLC BBF2 JMP $B7D8 ; qinlin Do Input Prompt BBF5 iBBF5 LDA $10 ; 3: width of source (unused - from TTY) BBF7 BNE $BBFF BBF9 JSR $BB44 ; -Print '?' BBFC JSR $BB3A ; outspc Output Format Character BBFF iBBFF JMP $B4E2 ; inlin Input Line Into Buffer ; read Perform [read] BC02 LDX $3E ; Pointer: Current DATA Item Address BC04 LDY $3F BC06 LDA #$98 BC08 BIT $00A9 ; *** BC08: ADDRESS DIFFER. This may indicate misassembly *** BC0B iBC0B STA $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ BC0D STX $40 ; INPUT, READ and GET vector to save CHRGET BC0F STY $41 BC11 iBC11 JSR $C12B ; ptrget Identify Variable BC14 STA $46 ; Pointer: Index Variable for FOR/NEXT BC16 STY $47 BC18 LDA $77 ; Pointer: Current Byte of BASIC Text BC1A LDY $78 BC1C STA $48 ; Y-save; op-save; Temporary storage for TXTPTR BC1E STY $49 BC20 LDX $40 ; INPUT, READ and GET vector to save CHRGET BC22 LDY $41 BC24 STX $77 ; Pointer: Current Byte of BASIC Text BC26 STY $78 BC28 JSR $0076 ; Entry to Get Same Byte of Text Again BC2B BNE $BC4D BC2D BIT $0B BC2F BVC $BC3D ; rdget General Purpose Read Routine BC31 JSR $FFE4 ; jmp $f205 getin Get From Keyboad BC34 STA $0200 ; System INPUT Buffer BC37 LDX #$FF BC39 LDY #$01 BC3B BNE $BC49 BC3D iBC3D BMI $BCB4 BC3F LDA $10 ; 3: width of source (unused - from TTY) BC41 BNE $BC46 BC43 JSR $BB44 ; -Print '?' BC46 iBC46 JSR $BBF5 ; qinlin Do Input Prompt BC49 iBC49 STX $77 ; Pointer: Current Byte of BASIC Text BC4B STY $78 BC4D iBC4D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BC50 BIT $07 BC52 BPL $BC85 BC54 BIT $0B BC56 BVC $BC61 BC58 INX BC59 STX $77 ; Pointer: Current Byte of BASIC Text BC5B LDA #$00 BC5D STA $03 ; Search Character BC5F BEQ $BC6D BC61 iBC61 STA $03 ; Search Character BC63 CMP #$22 BC65 BEQ $BC6E BC67 LDA #$3A BC69 STA $03 ; Search Character BC6B LDA #$2C BC6D iBC6D CLC BC6E iBC6E STA $04 ; Flag: Scan for Quote at End of String BC70 LDA $77 ; Pointer: Current Byte of BASIC Text BC72 LDY $78 BC74 ADC #$00 BC76 BCC $BC79 BC78 INY BC79 iBC79 JSR $C5B6 BC7C JSR $C918 BC7F JSR $B965 BC82 JMP $BC8D BC85 iBC85 JSR $CE29 ; fin Convert ASCII String to a Number in FAC#1 BC88 LDA $08 ; Data Type: $80 = Integer, $00 = Floating BC8A JSR $B94D BC8D iBC8D JSR $0076 ; Entry to Get Same Byte of Text Again BC90 BEQ $BC99 BC92 CMP #$2C BC94 BEQ $BC99 BC96 JMP $BB4C ; doagin Handle Bad Data BC99 iBC99 LDA $77 ; Pointer: Current Byte of BASIC Text BC9B LDY $78 BC9D STA $40 ; INPUT, READ and GET vector to save CHRGET BC9F STY $41 BCA1 LDA $48 ; Y-save; op-save; Temporary storage for TXTPTR BCA3 LDY $49 BCA5 STA $77 ; Pointer: Current Byte of BASIC Text BCA7 STY $78 BCA9 JSR $0076 ; Entry to Get Same Byte of Text Again BCAC BEQ $BCDA BCAE JSR $BEF5 ; -Test comma- BCB1 JMP $BC11 BCB4 iBCB4 JSR $B891 ; datan Search for Next Statement / Line BCB7 INY BCB8 TAX BCB9 BNE $BCCD BCBB LDX #$2A BCBD INY BCBE LDA ($77),Y ; Pointer: Current Byte of BASIC Text BCC0 BEQ $BD2D BCC2 INY BCC3 LDA ($77),Y ; Pointer: Current Byte of BASIC Text BCC5 STA $3C ; Current DATA Line Number BCC7 INY BCC8 LDA ($77),Y ; Pointer: Current Byte of BASIC Text BCCA INY BCCB STA $3D BCCD iBCCD LDA ($77),Y ; Pointer: Current Byte of BASIC Text BCCF TAX BCD0 JSR $B886 BCD3 CPX #$83 BCD5 BNE $BCB4 BCD7 JMP $BC4D BCDA iBCDA LDA $40 ; INPUT, READ and GET vector to save CHRGET BCDC LDY $41 BCDE LDX $0B ; Flag: $00 = INPUT, $40 = GET, $98 = READ BCE0 BPL $BCE5 BCE2 JMP $B7C1 BCE5 iBCE5 LDY #$00 BCE7 LDA ($40),Y ; INPUT, READ and GET vector to save CHRGET BCE9 BEQ $BCF6 ; exint Input Error Messages DATA BCEB LDA $10 ; 3: width of source (unused - from TTY) BCED BNE $BCF6 ; exint Input Error Messages DATA BCEF LDA #$F7 BCF1 LDY #$BC BCF3 JMP $BB1D ; strout Output String ; exint Input Error Messages DATA BCF6 .byte 60 3F 45 58 54 52 41 20 ;`?extra BCFE .byte 49 47 4E 4F 52 45 44 0D ;ignored. BD06 .byte 00 3F 52 45 44 4F 20 46 ;.?redo f BD0E .byte 52 4F 4D 20 53 54 41 52 ;rom star BD16 .byte 54 0D 00 ;t.. ; next Perform [next] BD19 BNE $BD1F BD1B LDY #$00 BD1D BEQ $BD22 BD1F iBD1F JSR $C12B ; ptrget Identify Variable BD22 iBD22 STA $46 ; Pointer: Index Variable for FOR/NEXT BD24 STY $47 BD26 JSR $B322 ; fndfor Find FOR/GOSUB Entry on Stack BD29 BEQ $BD2F BD2B LDX #$00 BD2D iBD2D BEQ $BD95 BD2F iBD2F TXS BD30 TXA BD31 CLC BD32 ADC #$04 BD34 PHA BD35 ADC #$06 BD37 STA $21 BD39 PLA BD3A LDY #$01 BD3C JSR $CCD8 ; movfm Load FAC#1 From Memory BD3F TSX BD40 LDA $0109,X BD43 STA $63 ; Floating Accum. #1: Sign BD45 LDA $46 ; Pointer: Index Variable for FOR/NEXT BD47 LDY $47 BD49 JSR $C99D ; fadd Perform Addition BD4C JSR $CD06 BD4F LDY #$01 BD51 JSR $CD93 BD54 TSX BD55 SEC BD56 SBC $0109,X BD59 BEQ $BD72 ; donext Check Valid Loop BD5B LDA $010F,X BD5E STA $36 ; Current BASIC Line Number BD60 LDA $0110,X BD63 STA $37 BD65 LDA $0112,X BD68 STA $77 ; Pointer: Current Byte of BASIC Text BD6A LDA $0111,X BD6D STA $78 BD6F iBD6F JMP $B74A ; newstt BASIC Warm Start BD72 iBD72 TXA BD73 ADC #$11 BD75 TAX BD76 TXS BD77 JSR $0076 ; Entry to Get Same Byte of Text Again BD7A CMP #$2C BD7C BNE $BD6F BD7E JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BD81 JSR $BD1F ; frmnum Confirm Result BD84 iBD84 JSR $BD98 ; frmevl Evaluate Expression in Text ; -Confirm numeric mode BD87 iBD87 CLC BD88 BIT $38 ; *** Resyncing *** ; -Confirm string mode BD89 iBD89 SEC BD8A iBD8A BIT $07 BD8C BMI $BD91 BD8E BCS $BD93 BD90 iBD90 RTS BD91 iBD91 BCS $BD90 BD93 iBD93 LDX #$A3 BD95 iBD95 JMP $B3CF ; error Error Routine ; frmevl Evaluate Expression in Text BD98 iBD98 LDX $77 ; Pointer: Current Byte of BASIC Text BD9A BNE $BD9E BD9C DEC $78 BD9E iBD9E DEC $77 ; Pointer: Current Byte of BASIC Text BDA0 LDX #$00 BDA2 BIT $48 ; *** BDA2: ADDRESS DIFFER. This may indicate misassembly *** BDA4 TXA BDA5 PHA BDA6 LDA #$01 BDA8 JSR $B393 ; getstk Check Stack Depth BDAB JSR $BE81 ; eval Evaluate Single Term BDAE LDA #$00 BDB0 STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BDB2 iBDB2 JSR $0076 ; Entry to Get Same Byte of Text Again BDB5 iBDB5 SEC BDB6 SBC #$B1 BDB8 BCC $BDD1 BDBA CMP #$03 BDBC BCS $BDD1 BDBE CMP #$01 BDC0 ROL BDC1 EOR #$01 BDC3 EOR $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BDC5 CMP $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BDC7 BCC $BE2A BDC9 STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BDCB JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BDCE JMP $BDB5 BDD1 iBDD1 LDX $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BDD3 BNE $BE01 BDD5 BCS $BE56 BDD7 ADC #$07 BDD9 BCC $BE56 BDDB ADC $07 ; Data Type: $FF = String, $00 = Numeric BDDD BNE $BDE2 BDDF JMP $C74F ; cat Concatenate Two Strings BDE2 iBDE2 ADC #$FF BDE4 STA $1F ; Utility Pointer Area BDE6 ASL BDE7 ADC $1F ; Utility Pointer Area BDE9 TAY BDEA iBDEA PLA BDEB CMP $B094,Y ; optab BASIC Operator Vectors DATA BDEE BCS $BE5B BDF0 JSR $BD87 ; -Confirm numeric mode BDF3 iBDF3 PHA BDF4 iBDF4 JSR $BE1A BDF7 PLA BDF8 LDY $48 ; Y-save; op-save; Temporary storage for TXTPTR BDFA BPL $BE13 BDFC TAX BDFD BEQ $BE59 BDFF BNE $BE64 BE01 iBE01 LSR $07 ; Data Type: $FF = String, $00 = Numeric BE03 TXA BE04 ROL BE05 LDX $77 ; Pointer: Current Byte of BASIC Text BE07 BNE $BE0B BE09 DEC $78 BE0B iBE0B DEC $77 ; Pointer: Current Byte of BASIC Text BE0D LDY #$1B BE0F STA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BE11 BNE $BDEA BE13 iBE13 CMP $B094,Y ; optab BASIC Operator Vectors DATA BE16 BCS $BE64 BE18 BCC $BDF3 BE1A iBE1A LDA $B096,Y BE1D PHA BE1E LDA $B095,Y BE21 PHA BE22 JSR $BE2D BE25 LDA $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. BE27 JMP $BDA3 BE2A iBE2A JMP $BF00 ; synerr Output ?SYNTAX Error BE2D iBE2D LDA $63 ; Floating Accum. #1: Sign BE2F LDX $B094,Y ; optab BASIC Operator Vectors DATA BE32 iBE32 TAY BE33 PLA BE34 STA $1F ; Utility Pointer Area BE36 PLA BE37 STA $20 BE39 TYA BE3A PHA BE3B INC $1F ; Utility Pointer Area BE3D BNE $BE41 BE3F INC $20 BE41 iBE41 JSR $CD51 ; round Round FAC#1 BE44 LDA $62 BE46 PHA BE47 LDA $61 BE49 PHA BE4A LDA $60 BE4C PHA BE4D LDA $5F ; Floating Accum. #1: Mantissa BE4F PHA BE50 LDA $5E ; Floating-Point Accumulator #1: Exponent BE52 PHA BE53 JMP ($001F) ; Utility Pointer Area BE56 iBE56 LDY #$FF BE58 PLA BE59 iBE59 BEQ $BE7E BE5B iBE5B CMP #$64 BE5D BEQ $BE62 BE5F JSR $BD87 ; -Confirm numeric mode BE62 iBE62 STY $48 ; Y-save; op-save; Temporary storage for TXTPTR BE64 iBE64 PLA BE65 LSR BE66 STA $0C ; Flag TAN sign / Comparison Result BE68 PLA BE69 STA $66 ; Floating-Point Accumulator #2: Exponent BE6B PLA BE6C STA $67 ; Floating Accum. #2: Mantissa BE6E PLA BE6F STA $68 BE71 PLA BE72 STA $69 BE74 PLA BE75 STA $6A BE77 PLA BE78 STA $6B ; Floating Accum. #2: Sign BE7A EOR $63 ; Floating Accum. #1: Sign BE7C STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 BE7E iBE7E LDA $5E ; Floating-Point Accumulator #1: Exponent BE80 RTS ; eval Evaluate Single Term BE81 iBE81 LDA #$00 BE83 STA $07 ; Data Type: $FF = String, $00 = Numeric BE85 iBE85 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BE88 BCS $BE8D BE8A iBE8A JMP $CE29 ; fin Convert ASCII String to a Number in FAC#1 BE8D iBE8D JSR $C1B6 ; isletc Does A hold an alphabetic character? BE90 BCS $BF0D BE92 CMP #$FF BE94 BNE $BEA5 ; qdot Continue Expression BE96 LDA #$A0 BE98 LDY #$BE BE9A JSR $CCD8 ; movfm Load FAC#1 From Memory BE9D JMP $0070 ; Subroutine: Get Next Byte of BASIC Text ; pival Constant - PI DATA BEA0 .byte 82 49 0F DA A1 ;.i.Z. ; qdot Continue Expression BEA5 iBEA5 CMP #$2E BEA7 BEQ $BE8A BEA9 CMP #$AB BEAB BEQ $BF05 ; domin Set up NOT Function BEAD CMP #$AA BEAF BEQ $BE85 BEB1 CMP #$22 BEB3 BNE $BEC4 BEB5 iBEB5 LDA $77 ; Pointer: Current Byte of BASIC Text BEB7 LDY $78 BEB9 ADC #$00 BEBB BCC $BEBE BEBD INY BEBE iBEBE JSR $C5B0 ; strlit Set Up String BEC1 JMP $C918 BEC4 iBEC4 CMP #$A8 BEC6 BNE $BEDB BEC8 LDY #$18 BECA BNE $BF07 ; - Evaluate BECC JSR $C2EA ; ayint FAC#1 to Positive Integer BECF LDA $62 BED1 EOR #$FF BED3 TAY BED4 LDA $61 BED6 EOR #$FF BED8 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt BEDB iBEDB CMP #$A5 BEDD BNE $BEE2 BEDF JMP $C51D ; fndoer Perform [fn] BEE2 iBEE2 CMP #$B4 BEE4 BCC $BEE9 ; parchk Expression in Brackets BEE6 JMP $C047 ; isfun Identify Function Type ; parchk Expression in Brackets BEE9 iBEE9 JSR $BEF2 ; -Test '('- BEEC JSR $BD98 ; frmevl Evaluate Expression in Text ; chkcls Confirm Character\-Test ')'- BEEF iBEEF LDA #$29 BEF1 BIT $28A9 ; *** Resyncing *** ; -Test '('- BEF2 iBEF2 LDA #$28 BEF4 BIT $2CA9 ; *** Resyncing *** ; -Test comma- BEF5 iBEF5 LDA #$2C ; -Confirm Character in A BEF7 iBEF7 LDY #$00 BEF9 CMP ($77),Y ; Pointer: Current Byte of BASIC Text BEFB BNE $BF00 ; synerr Output ?SYNTAX Error BEFD JMP $0070 ; Subroutine: Get Next Byte of BASIC Text ; synerr Output ?SYNTAX Error BF00 iBF00 LDX #$10 BF02 JMP $B3CF ; error Error Routine ; domin Set up NOT Function BF05 iBF05 LDY #$15 BF07 iBF07 PLA BF08 PLA BF09 JMP $BDF4 ; Patch for getspt BF0C CLV BF0D iBF0D JMP $BF8C ; isvar Search for Variable BF10 iBF10 PHA BF11 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve BF13 BEQ $BF1D BF15 PLA BF16 CMP $0F ; 3: terminal width (unused-carried over from TTY) BF18 BNE $BF1E BF1A JMP $BA70 BF1D iBF1D PLA BF1E iBF1E JMP $BA74 ; ? BF21 iBF21 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text BF24 CMP #$FF BF26 BNE $BF2B BF28 JMP $BF00 ; synerr Output ?SYNTAX Error BF2B iBF2B JMP $0076 ; Entry to Get Same Byte of Text Again ; Patch for [input] BF2E iBF2E LDA $10 ; 3: width of source (unused - from TTY) BF30 BNE $BF35 BF32 JMP $BBF1 BF35 iBF35 LDA $96 ; Kernal I/O Status Word: ST BF37 AND #$40 BF39 BNE $BF3E BF3B JMP $BBD5 BF3E iBF3E JMP $BC09 ; Unused EMPTY BF41 .byte AA AA AA AA AA AA AA AA ;........ BF49 .byte AA AA AA AA AA AA AA AA ;........ BF51 .byte AA AA AA AA AA AA AA AA ;........ BF59 .byte AA AA AA AA AA AA AA AA ;........ BF61 .byte AA AA AA AA AA AA AA AA ;........ BF69 .byte AA AA AA AA AA AA AA AA ;........ BF71 .byte AA AA AA AA AA AA AA AA ;........ BF79 .byte AA AA AA AA AA AA AA AA ;........ BF81 .byte AA AA AA AA AA AA AA AA ;........ BF89 .byte AA AA AA ;... ; isvar Search for Variable BF8C iBF8C JSR $C12B ; ptrget Identify Variable BF8F STA $61 BF91 STY $62 BF93 LDA $42 ; Current BASIC Variable Name BF95 LDY $43 BF97 LDX $07 ; Data Type: $FF = String, $00 = Numeric BF99 BEQ $BFD4 BF9B LDX #$00 BF9D STX $6D ; Floating Accum. #1. Low-Order (Rounding) BF9F LDX $62 BFA1 CPX #$8B BFA3 BCC $BFD3 BFA5 CMP #$54 BFA7 BNE $BFC1 BFA9 CPY #$C9 BFAB BNE $BFC1 ; tisasc Convert TI to ASCII String BFAD JSR $C003 ; -read real time clock BFB0 STY $5B BFB2 DEY BFB3 STY $6E ; Pointer: Cassette Buffer BFB5 LDY #$06 BFB7 STY $5A BFB9 LDY #$24 BFBB JSR $D01E ; foutim Convert TI to String BFBE JMP $C598 BFC1 iBFC1 CMP #$44 BFC3 BNE $BFD3 BFC5 CPY #$D3 BFC7 BNE $BFD3 BFC9 JSR $BFFC BFCC LDA $0E ; 3: File# of current I/O device (as 0010) BFCE LDY $0F ; 3: terminal width (unused-carried over from TTY) BFD0 JMP $C5B0 ; strlit Set Up String BFD3 iBFD3 RTS BFD4 iBFD4 LDX $08 ; Data Type: $80 = Integer, $00 = Floating BFD6 BPL $BFE5 BFD8 LDY #$00 BFDA LDA ($61),Y BFDC TAX BFDD INY BFDE LDA ($61),Y BFE0 TAY BFE1 TXA BFE2 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt BFE5 iBFE5 LDX $62 BFE7 CPX #$8B BFE9 BCC $C040 BFEB CMP #$54 BFED BNE $C00F BFEF CPY #$49 BFF1 BNE $C040 BFF3 JSR $C003 ; -read real time clock BFF6 TYA BFF7 LDX #$A0 BFF9 JMP $CD85 BFFC iBFFC LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve BFFE BNE $BFD3 C000 JMP $FFBD ; jmp $d995 ; -read real time clock C003 iC003 LDA #$8B C005 LDY #$00 C007 SEI C008 JSR $CCD8 ; movfm Load FAC#1 From Memory C00B CLI C00C STY $5F ; Floating Accum. #1: Mantissa C00E RTS C00F iC00F CMP #$53 C011 BNE $C01C C013 CPY #$54 C015 BNE $C01C C017 LDA $96 ; Kernal I/O Status Word: ST C019 JMP $CD72 C01C iC01C CMP #$44 C01E BNE $C040 C020 CPY #$53 C022 BNE $C040 C024 JSR $BFFC C027 LDY #$00 C029 LDA ($0E),Y ; 3: File# of current I/O device (as 0010) C02B AND #$0F C02D ASL C02E STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll C030 ASL C031 ASL C032 ADC $09 ; Flag: DATA scan/LlST quote/Garbage Coll C034 STA $09 ; Flag: DATA scan/LlST quote/Garbage Coll C036 INY C037 LDA ($0E),Y ; 3: File# of current I/O device (as 0010) C039 AND #$0F C03B ADC $09 ; Flag: DATA scan/LlST quote/Garbage Coll C03D JMP $CD72 C040 iC040 LDA $61 C042 LDY $62 C044 JMP $CCD8 ; movfm Load FAC#1 From Memory ; isfun Identify Function Type C047 iC047 ASL C048 PHA C049 TAX C04A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text C04D CPX #$8F C04F BCC $C071 ; numfun Evaluate Numeric Function ; strfun Evaluate String Function C051 JSR $BEF2 ; -Test '('- C054 JSR $BD98 ; frmevl Evaluate Expression in Text C057 JSR $BEF5 ; -Test comma- C05A JSR $BD89 ; -Confirm string mode C05D PLA C05E TAX C05F LDA $62 C061 PHA C062 LDA $61 C064 PHA C065 TXA C066 PHA C067 JSR $C8D4 ; -Eval Byte Parameter C06A PLA C06B TAY C06C TXA C06D PHA C06E JMP $C076 ; numfun Evaluate Numeric Function C071 iC071 JSR $BEE9 ; parchk Expression in Brackets C074 PLA C075 TAY C076 iC076 LDA $AFFE,Y C079 STA $52 C07B LDA $AFFF,Y C07E STA $53 C080 JSR $0051 C083 JMP $BD87 ; -Confirm numeric mode ; orop Evaluate C086 LDY #$FF C088 BIT $00A0 ; *** Resyncing *** ; - Evaluate C089 LDY #$00 C08B STY $05 ; Input Buffer Pointer / No. of Subscripts C08D JSR $C2EA ; ayint FAC#1 to Positive Integer C090 LDA $61 C092 EOR $05 ; Input Buffer Pointer / No. of Subscripts C094 STA $03 ; Search Character C096 LDA $62 C098 EOR $05 ; Input Buffer Pointer / No. of Subscripts C09A STA $04 ; Flag: Scan for Quote at End of String C09C JSR $CD32 ; movfa Copy FAC#2 into FAC#1 C09F JSR $C2EA ; ayint FAC#1 to Positive Integer C0A2 LDA $62 C0A4 EOR $05 ; Input Buffer Pointer / No. of Subscripts C0A6 AND $04 ; Flag: Scan for Quote at End of String C0A8 EOR $05 ; Input Buffer Pointer / No. of Subscripts C0AA TAY C0AB LDA $61 C0AD EOR $05 ; Input Buffer Pointer / No. of Subscripts C0AF AND $03 ; Search Character C0B1 EOR $05 ; Input Buffer Pointer / No. of Subscripts C0B3 JMP $C4BC ; givayf Convert Integer in (AC/YR) to Flpt ; dorel Evaluate (comparison) C0B6 JSR $BD8A C0B9 BCS $C0CE ; strrel String Comparison ; numrel Numeric Comparison C0BB LDA $6B ; Floating Accum. #2: Sign C0BD ORA #$7F C0BF AND $67 ; Floating Accum. #2: Mantissa C0C1 STA $67 ; Floating Accum. #2: Mantissa C0C3 LDA #$66 C0C5 LDY #$00 C0C7 JSR $CD91 ; fcomp Compare FAC#1 With Memory C0CA TAX C0CB JMP $C101 ; strrel String Comparison C0CE iC0CE LDA #$00 C0D0 STA $07 ; Data Type: $FF = String, $00 = Numeric C0D2 DEC $4A ; Comparison symbol accumulator: bits 0,1,2 are <, =, >. C0D4 JSR $C7B8 C0D7 STA $5E ; Floating-Point Accumulator #1: Exponent C0D9 STX $5F ; Floating Accum. #1: Mantissa C0DB STY $60 C0DD LDA $69 C0DF LDY $6A C0E1 JSR $C7BC C0E4 STX $69 C0E6 STY $6A C0E8 TAX C0E9 SEC C0EA SBC $5E ; Floating-Point Accumulator #1: Exponent C0EC BEQ $C0F6 C0EE LDA #$01 C0F0 BCC $C0F6 C0F2 LDX $5E ; Floating-Point Accumulator #1: Exponent C0F4 LDA #$FF C0F6 iC0F6 STA $63 ; Floating Accum. #1: Sign C0F8 LDY #$FF C0FA INX C0FB iC0FB INY C0FC DEX C0FD BNE $C106 C0FF LDX $63 ; Floating Accum. #1: Sign C101 iC101 BMI $C112 C103 CLC C104 BCC $C112 C106 iC106 LDA ($69),Y C108 CMP ($5F),Y ; Floating Accum. #1: Mantissa C10A BEQ $C0FB C10C LDX #$FF C10E BCS $C112 C110 LDX #$01 C112 iC112 INX C113 TXA C114 ROL C115 AND $0C ; Flag TAN sign / Comparison Result C117 BEQ $C11B C119 LDA #$FF C11B iC11B JMP $CD72 ; dim Perform [dim] C11E iC11E JSR $BEF5 ; -Test comma- C121 TAX C122 JSR $C130 C125 JSR $0076 ; Entry to Get Same Byte of Text Again C128 BNE $C11E ; dim Perform [dim] C12A RTS ; ptrget Identify Variable C12B iC12B LDX #$00 C12D JSR $0076 ; Entry to Get Same Byte of Text Again C130 iC130 STX $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag C132 iC132 STA $42 ; Current BASIC Variable Name C134 JSR $0076 ; Entry to Get Same Byte of Text Again C137 JSR $C1B6 ; isletc Does A hold an alphabetic character? C13A BCS $C13F C13C iC13C JMP $BF00 ; synerr Output ?SYNTAX Error C13F iC13F LDX #$00 C141 STX $07 ; Data Type: $FF = String, $00 = Numeric C143 STX $08 ; Data Type: $80 = Integer, $00 = Floating C145 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text C148 BCC $C14F C14A JSR $C1B6 ; isletc Does A hold an alphabetic character? C14D BCC $C15A C14F iC14F TAX C150 iC150 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text C153 BCC $C150 C155 JSR $C1B6 ; isletc Does A hold an alphabetic character? C158 BCS $C150 C15A iC15A CMP #$24 C15C BNE $C164 C15E LDA #$FF C160 STA $07 ; Data Type: $FF = String, $00 = Numeric C162 BNE $C174 C164 iC164 CMP #$25 C166 BNE $C17B C168 LDA $0A ; Flag: Subscript Ref / User Function Call C16A BNE $C13C C16C LDA #$80 C16E STA $08 ; Data Type: $80 = Integer, $00 = Floating C170 ORA $42 ; Current BASIC Variable Name C172 STA $42 ; Current BASIC Variable Name C174 iC174 TXA C175 ORA #$80 C177 TAX C178 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text C17B iC17B STX $43 C17D SEC C17E ORA $0A ; Flag: Subscript Ref / User Function Call C180 SBC #$28 C182 BNE $C187 ; ordvar Locate Ordinary Variable C184 JMP $C2FC ; isary Get Array Parameters ; ordvar Locate Ordinary Variable C187 iC187 LDY #$00 C189 STY $0A ; Flag: Subscript Ref / User Function Call C18B LDA $2A ; Pointer: Start of BASIC Variables C18D LDX $2B C18F iC18F STX $5D C191 iC191 STA $5C C193 CPX $2D C195 BNE $C19B C197 CMP $2C ; Pointer: Start of BASIC Arrays C199 BEQ $C1C0 ; notfns Create New Variable C19B iC19B LDA $42 ; Current BASIC Variable Name C19D CMP ($5C),Y C19F BNE $C1AC C1A1 LDA $43 C1A3 INY C1A4 CMP ($5C),Y C1A6 BNE $C1AB C1A8 JMP $C2B9 C1AB iC1AB DEY C1AC iC1AC CLC C1AD LDA $5C C1AF ADC #$07 C1B1 BCC $C191 C1B3 INX C1B4 BNE $C18F ; isletc Does A hold an alphabetic character? C1B6 iC1B6 CMP #$41 C1B8 BCC $C1BF C1BA SBC #$5B C1BC SEC C1BD SBC #$A5 C1BF iC1BF RTS ; notfns Create New Variable C1C0 iC1C0 PLA C1C1 PHA C1C2 CMP #$8E C1C4 BNE $C1CB ; notevl Create Variable C1C6 iC1C6 LDA #$C9 C1C8 LDY #$D0 C1CA RTS ; notevl Create Variable C1CB iC1CB LDA $42 ; Current BASIC Variable Name C1CD LDY $43 C1CF CMP #$54 C1D1 BNE $C1DE C1D3 CPY #$C9 C1D5 BEQ $C1C6 C1D7 CPY #$49 C1D9 BNE $C1DE C1DB iC1DB JMP $BF00 ; synerr Output ?SYNTAX Error C1DE iC1DE CMP #$53 C1E0 BNE $C1E6 C1E2 CPY #$54 C1E4 BEQ $C1DB C1E6 iC1E6 CMP #$44 C1E8 BNE $C1F2 C1EA CPY #$53 C1EC BEQ $C1DB C1EE CPY #$D3 C1F0 BEQ $C1DB C1F2 iC1F2 LDA $2C ; Pointer: Start of BASIC Arrays C1F4 LDY $2D C1F6 STA $5C C1F8 STY $5D C1FA LDA $2E ; Pointer End of BASIC Arrays (+1) C1FC LDY $2F C1FE STA $57 C200 STY $58 C202 CLC C203 ADC #$07 C205 BCC $C208 C207 INY C208 iC208 STA $55 C20A STY $56 C20C JSR $B350 ; bltu Open Space in Memory C20F LDA $55 C211 LDY $56 C213 INY C214 STA $2C ; Pointer: Start of BASIC Arrays C216 STY $2D C218 STA $55 C21A STY $56 C21C iC21C LDA $55 C21E LDX $56 C220 iC220 CPX $2F C222 BNE $C228 C224 CMP $2E ; Pointer End of BASIC Arrays (+1) C226 BEQ $C29D C228 iC228 STA $1F ; Utility Pointer Area C22A STX $20 C22C LDY #$00 C22E LDA ($1F),Y ; Utility Pointer Area C230 TAX C231 INY C232 LDA ($1F),Y ; Utility Pointer Area C234 PHP C235 INY C236 LDA ($1F),Y ; Utility Pointer Area C238 ADC $55 C23A STA $55 C23C INY C23D LDA ($1F),Y ; Utility Pointer Area C23F ADC $56 C241 STA $56 C243 PLP C244 BPL $C21C C246 TXA C247 BMI $C21C C249 INY C24A LDA ($1F),Y ; Utility Pointer Area C24C LDY #$00 C24E ASL C24F ADC #$05 C251 ADC $1F ; Utility Pointer Area C253 STA $1F ; Utility Pointer Area C255 BCC $C259 C257 INC $20 C259 iC259 LDX $20 C25B CPX $56 C25D BNE $C263 C25F CMP $55 C261 BEQ $C220 C263 iC263 LDY #$00 C265 LDA ($1F),Y ; Utility Pointer Area C267 BEQ $C290 C269 INY C26A CLC C26B ADC ($1F),Y ; Utility Pointer Area C26D STA $57 C26F TAX C270 INY C271 LDA ($1F),Y ; Utility Pointer Area C273 ADC #$00 C275 STA $58 C277 CMP $31 C279 BCC $C290 C27B BNE $C281 C27D CPX $30 ; Pointer: Bottom of String Storage C27F BCC $C290 C281 iC281 LDY #$00 C283 LDA ($57),Y C285 ADC #$06 C287 STA ($57),Y C289 INY C28A LDA ($57),Y C28C ADC #$00 C28E STA ($57),Y C290 iC290 LDA #$03 C292 CLC C293 ADC $1F ; Utility Pointer Area C295 STA $1F ; Utility Pointer Area C297 BCC $C259 C299 INC $20 C29B BNE $C259 C29D iC29D LDY #$00 C29F LDA $42 ; Current BASIC Variable Name C2A1 STA ($5C),Y C2A3 INY C2A4 LDA $43 C2A6 STA ($5C),Y C2A8 LDA #$00 C2AA INY C2AB STA ($5C),Y C2AD INY C2AE STA ($5C),Y C2B0 INY C2B1 STA ($5C),Y C2B3 INY C2B4 STA ($5C),Y C2B6 INY C2B7 STA ($5C),Y C2B9 iC2B9 LDA $5C C2BB CLC C2BC ADC #$02 C2BE LDY $5D C2C0 BCC $C2C3 C2C2 INY C2C3 iC2C3 STA $44 ; Pointer: Current BASIC Variable Data C2C5 STY $45 C2C7 RTS ; aryget Allocate Array Pointer Space C2C8 iC2C8 LDA $05 ; Input Buffer Pointer / No. of Subscripts C2CA ASL C2CB ADC #$05 C2CD ADC $5C C2CF LDY $5D C2D1 BCC $C2D4 C2D3 INY C2D4 iC2D4 STA $55 C2D6 STY $56 C2D8 RTS ; n32768 Constant 32768 in Flpt DATA C2D9 .byte 90 80 00 00 ;.... ; intidx Evaluate Text for Integer C2DD iC2DD JSR $0070 ; Subroutine: Get Next Byte of BASIC Text C2E0 JSR $BD98 ; frmevl Evaluate Expression in Text C2E3 iC2E3 JSR $BD87 ; -Confirm numeric mode C2E6 LDA $63 ; Floating Accum. #1: Sign C2E8 BMI $C2F7 ; ayint FAC#1 to Positive Integer C2EA iC2EA LDA $5E ; Floating-Point Accumulator #1: Exponent C2EC CMP #$90 C2EE BCC $C2F9 C2F0 LDA #$D9 C2F2 LDY #$C2 C2F4 JSR $CD91 ; fcomp Compare FAC#1 With Memory C2F7 iC2F7 BNE $C373 ; - ?ILLEGAL QUANTITY C2F9 iC2F9 JMP $CDD1 ; qint Convert FAC#1 to Integer ; isary Get Array Parameters C2FC iC2FC LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag C2FE ORA $08 ; Data Type: $80 = Integer, $00 = Floating C300 PHA C301 LDA $07 ; Data Type: $FF = String, $00 = Numeric C303 PHA C304 LDY #$00 C306 iC306 TYA C307 PHA C308 LDA $43 C30A PHA C30B LDA $42 ; Current BASIC Variable Name C30D PHA C30E JSR $C2DD ; intidx Evaluate Text for Integer C311 PLA C312 STA $42 ; Current BASIC Variable Name C314 PLA C315 STA $43 C317 PLA C318 TAY C319 TSX C31A LDA $0102,X C31D PHA C31E LDA $0101,X C321 PHA C322 LDA $61 C324 STA $0102,X C327 LDA $62 C329 STA $0101,X C32C INY C32D JSR $0076 ; Entry to Get Same Byte of Text Again C330 CMP #$2C C332 BEQ $C306 C334 STY $05 ; Input Buffer Pointer / No. of Subscripts C336 JSR $BEEF ; chkcls Confirm Character C339 PLA C33A STA $07 ; Data Type: $FF = String, $00 = Numeric C33C PLA C33D STA $08 ; Data Type: $80 = Integer, $00 = Floating C33F AND #$7F C341 STA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag ; fndary Find Array C343 LDX $2C ; Pointer: Start of BASIC Arrays C345 LDA $2D C347 iC347 STX $5C C349 STA $5D C34B CMP $2F C34D BNE $C353 C34F CPX $2E ; Pointer End of BASIC Arrays (+1) C351 BEQ $C38C ; notfdd Create Array C353 iC353 LDY #$00 C355 LDA ($5C),Y C357 INY C358 CMP $42 ; Current BASIC Variable Name C35A BNE $C362 C35C LDA $43 C35E CMP ($5C),Y C360 BEQ $C378 ; - ?REDIM'D ARRAY C362 iC362 INY C363 LDA ($5C),Y C365 CLC C366 ADC $5C C368 TAX C369 INY C36A LDA ($5C),Y C36C ADC $5D C36E BCC $C347 ; bserr ?BAD SUBSCRIPT C370 iC370 LDX #$6B C372 BIT $35A2 ; *** Resyncing *** ; - ?ILLEGAL QUANTITY C373 iC373 LDX #$35 C375 iC375 JMP $B3CF ; error Error Routine ; - ?REDIM'D ARRAY C378 iC378 LDX #$78 C37A LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag C37C BNE $C375 C37E JSR $C2C8 ; aryget Allocate Array Pointer Space C381 LDA $05 ; Input Buffer Pointer / No. of Subscripts C383 LDY #$04 C385 CMP ($5C),Y C387 BNE $C370 ; bserr ?BAD SUBSCRIPT C389 JMP $C415 ; notfdd Create Array C38C iC38C JSR $C2C8 ; aryget Allocate Array Pointer Space C38F JSR $B3A0 ; reason Check Memory Overlap C392 LDY #$00 C394 STY $6F C396 LDX #$05 C398 LDA $42 ; Current BASIC Variable Name C39A STA ($5C),Y C39C BPL $C39F C39E DEX C39F iC39F INY C3A0 LDA $43 C3A2 STA ($5C),Y C3A4 BPL $C3A8 C3A6 DEX C3A7 DEX C3A8 iC3A8 STX $6E ; Pointer: Cassette Buffer C3AA LDA $05 ; Input Buffer Pointer / No. of Subscripts C3AC INY C3AD INY C3AE INY C3AF STA ($5C),Y C3B1 iC3B1 LDX #$0B C3B3 LDA #$00 C3B5 BIT $06 C3B7 BVC $C3C1 C3B9 PLA C3BA CLC C3BB ADC #$01 C3BD TAX C3BE PLA C3BF ADC #$00 C3C1 iC3C1 INY C3C2 STA ($5C),Y C3C4 INY C3C5 TXA C3C6 STA ($5C),Y C3C8 JSR $C477 ; umult Number of Bytes in Subscript C3CB STX $6E ; Pointer: Cassette Buffer C3CD STA $6F C3CF LDY $1F ; Utility Pointer Area C3D1 DEC $05 ; Input Buffer Pointer / No. of Subscripts C3D3 BNE $C3B1 C3D5 ADC $56 C3D7 BCS $C436 C3D9 STA $56 C3DB TAY C3DC TXA C3DD ADC $55 C3DF BCC $C3E4 C3E1 INY C3E2 BEQ $C436 C3E4 iC3E4 JSR $B3A0 ; reason Check Memory Overlap C3E7 STA $2E ; Pointer End of BASIC Arrays (+1) C3E9 STY $2F C3EB LDA #$00 C3ED INC $6F C3EF LDY $6E ; Pointer: Cassette Buffer C3F1 BEQ $C3F8 C3F3 iC3F3 DEY C3F4 STA ($55),Y C3F6 BNE $C3F3 C3F8 iC3F8 DEC $56 C3FA DEC $6F C3FC BNE $C3F3 C3FE INC $56 C400 SEC C401 LDA $2E ; Pointer End of BASIC Arrays (+1) C403 SBC $5C C405 LDY #$02 C407 STA ($5C),Y C409 LDA $2F C40B INY C40C SBC $5D C40E STA ($5C),Y C410 LDA $06 ; Flag: Default Array DiMension / array name initial / AND, OR flag C412 BNE $C476 C414 INY C415 iC415 LDA ($5C),Y C417 STA $05 ; Input Buffer Pointer / No. of Subscripts C419 LDA #$00 C41B STA $6E ; Pointer: Cassette Buffer C41D iC41D STA $6F C41F INY C420 PLA C421 TAX C422 STA $61 C424 PLA C425 STA $62 C427 CMP ($5C),Y C429 BCC $C439 ; inlpn2 Locate Element in Array C42B BNE $C433 C42D INY C42E TXA C42F CMP ($5C),Y C431 BCC $C43A C433 iC433 JMP $C370 ; bserr ?BAD SUBSCRIPT C436 iC436 JMP $B3CD ; omerr Output ?OUT OF MEMORY Error ; inlpn2 Locate Element in Array C439 iC439 INY C43A iC43A LDA $6F C43C ORA $6E ; Pointer: Cassette Buffer C43E CLC C43F BEQ $C44B C441 JSR $C477 ; umult Number of Bytes in Subscript C444 TXA C445 ADC $61 C447 TAX C448 TYA C449 LDY $1F ; Utility Pointer Area C44B iC44B ADC $62 C44D STX $6E ; Pointer: Cassette Buffer C44F DEC $05 ; Input Buffer Pointer / No. of Subscripts C451 BNE $C41D C453 STA $6F C455 LDX #$05 C457 LDA $42 ; Current BASIC Variable Name C459 BPL $C45C C45B DEX C45C iC45C LDA $43 C45E BPL $C462 C460 DEX C461 DEX C462 iC462 STX $25 C464 LDA #$00 C466 JSR $C480 C469 TXA C46A ADC $55 C46C STA $44 ; Pointer: Current BASIC Variable Data C46E TYA C46F ADC $56 C471 STA $45 C473 TAY C474 LDA $44 ; Pointer: Current BASIC Variable Data C476 iC476 RTS ; umult Number of Bytes in Subscript C477 iC477 STY $1F ; Utility Pointer Area C479 LDA ($5C),Y C47B STA $25 C47D DEY C47E LDA ($5C),Y C480 iC480 STA $26 C482 LDA #$10 C484 STA $5A C486 LDX #$00 C488 LDY #$00 C48A iC48A TXA C48B ASL C48C TAX C48D TYA C48E ROL C48F TAY C490 BCS $C436 C492 ASL $6E ; Pointer: Cassette Buffer C494 ROL $6F C496 BCC $C4A3 C498 CLC C499 TXA C49A ADC $25 C49C TAX C49D TYA C49E ADC $26 C4A0 TAY C4A1 BCS $C436 C4A3 iC4A3 DEC $5A C4A5 BNE $C48A C4A7 RTS ; fre Evaluate C4A8 LDA $07 ; Data Type: $FF = String, $00 = Numeric C4AA BEQ $C4AF C4AC JSR $C7B8 C4AF iC4AF JSR $C66A ; garbag Garbage Collection C4B2 SEC C4B3 LDA $30 ; Pointer: Bottom of String Storage C4B5 SBC $2E ; Pointer End of BASIC Arrays (+1) C4B7 TAY C4B8 LDA $31 C4BA SBC $2F ; givayf Convert Integer in (AC/YR) to Flpt C4BC iC4BC LDX #$00 C4BE STX $07 ; Data Type: $FF = String, $00 = Numeric C4C0 STA $5F ; Floating Accum. #1: Mantissa C4C2 STY $60 C4C4 LDX #$90 C4C6 JMP $CD7A ; pos Evaluate C4C9 LDY $C6 ; Cursor Column on Current Line C4CB iC4CB LDA #$00 C4CD BEQ $C4BC ; givayf Convert Integer in (AC/YR) to Flpt ; errdir Confirm Program Mode C4CF iC4CF LDX $37 C4D1 INX C4D2 BNE $C476 C4D4 LDX #$95 C4D6 BIT $E9A2 ; *** Resyncing *** ; - ?UNDEF'D FUNCTION C4D7 iC4D7 LDX #$E9 C4D9 JMP $B3CF ; error Error Routine ; - Perform [def] C4DC JSR $C50A ; getfnm Check Syntax of FN C4DF JSR $C4CF ; errdir Confirm Program Mode C4E2 JSR $BEF2 ; -Test '('- C4E5 LDA #$80 C4E7 STA $0A ; Flag: Subscript Ref / User Function Call C4E9 JSR $C12B ; ptrget Identify Variable C4EC JSR $BD87 ; -Confirm numeric mode C4EF JSR $BEEF ; chkcls Confirm Character C4F2 LDA #$B2 C4F4 JSR $BEF7 ; -Confirm Character in A C4F7 PHA C4F8 LDA $45 C4FA PHA C4FB LDA $44 ; Pointer: Current BASIC Variable Data C4FD PHA C4FE LDA $78 C500 PHA C501 LDA $77 ; Pointer: Current Byte of BASIC Text C503 PHA C504 JSR $B883 ; data Perform [data] C507 JMP $C578 ; getfnm Check Syntax of FN C50A iC50A LDA #$A5 C50C JSR $BEF7 ; -Confirm Character in A C50F ORA #$80 C511 STA $0A ; Flag: Subscript Ref / User Function Call C513 JSR $C132 C516 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C518 STY $4C C51A JMP $BD87 ; -Confirm numeric mode ; fndoer Perform [fn] C51D iC51D JSR $C50A ; getfnm Check Syntax of FN C520 LDA $4C C522 PHA C523 LDA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C525 PHA C526 JSR $BEE9 ; parchk Expression in Brackets C529 JSR $BD87 ; -Confirm numeric mode C52C PLA C52D STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C52F PLA C530 STA $4C C532 LDY #$02 C534 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C536 STA $44 ; Pointer: Current BASIC Variable Data C538 TAX C539 INY C53A LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C53C BEQ $C4D7 ; - ?UNDEF'D FUNCTION C53E STA $45 C540 INY C541 iC541 LDA ($44),Y ; Pointer: Current BASIC Variable Data C543 PHA C544 DEY C545 BPL $C541 C547 LDY $45 C549 JSR $CD0A ; - Store FAC#1 at (AC/YR) C54C LDA $78 C54E PHA C54F LDA $77 ; Pointer: Current Byte of BASIC Text C551 PHA C552 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C554 STA $77 ; Pointer: Current Byte of BASIC Text C556 INY C557 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C559 STA $78 C55B LDA $45 C55D PHA C55E LDA $44 ; Pointer: Current BASIC Variable Data C560 PHA C561 JSR $BD84 ; frmnum Confirm Result C564 PLA C565 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C567 PLA C568 STA $4C C56A JSR $0076 ; Entry to Get Same Byte of Text Again C56D BEQ $C572 C56F JMP $BF00 ; synerr Output ?SYNTAX Error C572 iC572 PLA C573 STA $77 ; Pointer: Current Byte of BASIC Text C575 PLA C576 STA $78 C578 iC578 LDY #$00 C57A PLA C57B STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C57D PLA C57E INY C57F STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C581 PLA C582 INY C583 STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C585 PLA C586 INY C587 STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C589 PLA C58A INY C58B STA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C58D RTS ; strd Evaluate C58E JSR $BD87 ; -Confirm numeric mode C591 LDY #$00 C593 JSR $CF95 C596 PLA C597 PLA C598 iC598 LDA #$FF C59A LDY #$00 C59C BEQ $C5B0 ; strlit Set Up String C59E iC59E LDX $61 C5A0 LDY $62 C5A2 STX $4D ; Pointer to string, length and garbage collect constant C5A4 STY $4E C5A6 iC5A6 JSR $C61D ; getspa Allocate Space for String C5A9 STX $5F ; Floating Accum. #1: Mantissa C5AB STY $60 C5AD STA $5E ; Floating-Point Accumulator #1: Exponent C5AF RTS ; strlit Set Up String C5B0 iC5B0 LDX #$22 C5B2 STX $03 ; Search Character C5B4 STX $04 ; Flag: Scan for Quote at End of String C5B6 iC5B6 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 C5B8 STY $6D ; Floating Accum. #1. Low-Order (Rounding) C5BA STA $5F ; Floating Accum. #1: Mantissa C5BC STY $60 C5BE LDY #$FF C5C0 iC5C0 INY C5C1 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2 C5C3 BEQ $C5D1 C5C5 CMP $03 ; Search Character C5C7 BEQ $C5CD C5C9 CMP $04 ; Flag: Scan for Quote at End of String C5CB BNE $C5C0 C5CD iC5CD CMP #$22 C5CF BEQ $C5D2 C5D1 iC5D1 CLC C5D2 iC5D2 STY $5E ; Floating-Point Accumulator #1: Exponent C5D4 TYA C5D5 ADC $6C ; Sign Comparison Result: Accum. # 1 vs #2 C5D7 STA $6E ; Pointer: Cassette Buffer C5D9 LDX $6D ; Floating Accum. #1. Low-Order (Rounding) C5DB BCC $C5DE C5DD INX C5DE iC5DE STX $6F C5E0 LDA $6D ; Floating Accum. #1. Low-Order (Rounding) C5E2 BEQ $C5E8 C5E4 CMP #$02 C5E6 BNE $C5F3 C5E8 iC5E8 TYA C5E9 JSR $C59E C5EC LDX $6C ; Sign Comparison Result: Accum. # 1 vs #2 C5EE LDY $6D ; Floating Accum. #1. Low-Order (Rounding) C5F0 JSR $C79A C5F3 iC5F3 LDX $13 ; Pointer Temporary String C5F5 CPX #$1F C5F7 BNE $C5FE ; putnw1 Save String Descriptor C5F9 LDX #$C8 C5FB iC5FB JMP $B3CF ; error Error Routine ; putnw1 Save String Descriptor C5FE iC5FE LDA $5E ; Floating-Point Accumulator #1: Exponent C600 STA $00,X ; USR Function Jump Instr (4C) C602 LDA $5F ; Floating Accum. #1: Mantissa C604 STA $01,X ; USR Address [4: C373] C606 LDA $60 C608 STA $02,X C60A LDY #$00 C60C STX $61 C60E STY $62 C610 STY $6D ; Floating Accum. #1. Low-Order (Rounding) C612 DEY C613 STY $07 ; Data Type: $FF = String, $00 = Numeric C615 STX $14 ; Last Temp String Address C617 INX C618 INX C619 INX C61A STX $13 ; Pointer Temporary String C61C RTS ; getspa Allocate Space for String C61D iC61D LSR $09 ; Flag: DATA scan/LlST quote/Garbage Coll C61F iC61F TAX C620 BEQ $C65A C622 PHA C623 LDA $30 ; Pointer: Bottom of String Storage C625 SEC C626 SBC #$02 C628 LDY $31 C62A BCS $C62D C62C DEY C62D iC62D STA $1F ; Utility Pointer Area C62F STY $20 C631 TXA C632 EOR #$FF C634 SEC C635 ADC $1F ; Utility Pointer Area C637 BCS $C63A C639 DEY C63A iC63A CPY $2F C63C BCC $C65B C63E BNE $C644 C640 CMP $2E ; Pointer End of BASIC Arrays (+1) C642 BCC $C65B C644 iC644 STA $32 ; Utility String Pointer C646 STY $33 C648 LDY #$01 C64A LDA #$FF C64C STA ($1F),Y ; Utility Pointer Area C64E DEY C64F PLA C650 STA ($1F),Y ; Utility Pointer Area C652 LDX $32 ; Utility String Pointer C654 LDY $33 C656 STX $30 ; Pointer: Bottom of String Storage C658 STY $31 C65A iC65A RTS C65B iC65B LDX #$4D C65D LDA $09 ; Flag: DATA scan/LlST quote/Garbage Coll C65F BMI $C5FB C661 JSR $C66A ; garbag Garbage Collection C664 SEC C665 ROR $09 ; Flag: DATA scan/LlST quote/Garbage Coll C667 PLA C668 BNE $C61F ; garbag Garbage Collection C66A iC66A LDY #$00 C66C STY $55 C66E LDA $34 ; Pointer: Highest Address Used by BASIC C670 LDY $35 C672 STA $5C C674 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C676 STA $32 ; Utility String Pointer C678 STY $5D C67A STY $4C C67C STY $33 C67E iC67E CPY $31 C680 BCC $C700 C682 BNE $C68A C684 CMP $30 ; Pointer: Bottom of String Storage C686 BEQ $C700 C688 BCC $C700 C68A iC68A LDX $55 C68C BMI $C693 C68E LDA #$02 C690 JSR $C735 C693 iC693 JSR $C724 C696 LDY #$01 C698 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C69A CMP #$FF C69C BNE $C6A9 C69E iC69E DEY C69F LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6A1 JSR $C726 C6A4 SEC C6A5 ROR $55 C6A7 BNE $C67E C6A9 iC6A9 JSR $C744 C6AC LDX $55 C6AE BPL $C703 C6B0 LSR $55 C6B2 iC6B2 LDY #$00 C6B4 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6B6 STA ($5C),Y C6B8 INY C6B9 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6BB STA ($5C),Y C6BD DEY C6BE LDA ($1F),Y ; Utility Pointer Area C6C0 TAX C6C1 JSR $C735 C6C4 STA $32 ; Utility String Pointer C6C6 STY $33 C6C8 TXA C6C9 JSR $C726 C6CC TXA C6CD TAY C6CE iC6CE DEY C6CF LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6D1 STA ($5C),Y C6D3 DEX C6D4 BNE $C6CE C6D6 LDY #$02 C6D8 iC6D8 LDA $005B,Y C6DB STA ($1F),Y ; Utility Pointer Area C6DD DEY C6DE BNE $C6D8 C6E0 LDA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6E2 LDY $4C C6E4 CPY $31 C6E6 BCC $C700 C6E8 BNE $C6F0 C6EA CMP $30 ; Pointer: Bottom of String Storage C6EC BEQ $C700 C6EE BCC $C700 C6F0 iC6F0 JSR $C71F C6F3 LDY #$01 C6F5 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C6F7 CMP #$FF C6F9 BEQ $C69E C6FB JSR $C744 C6FE BMI $C6B2 C700 iC700 JMP $C716 C703 iC703 LDY #$00 C705 LDA ($1F),Y ; Utility Pointer Area C707 TAX C708 JSR $C735 C70B STA $32 ; Utility String Pointer C70D STY $33 C70F TXA C710 JSR $C726 C713 JMP $C67E C716 iC716 LDA $32 ; Utility String Pointer C718 LDY $33 C71A STA $30 ; Pointer: Bottom of String Storage C71C STY $31 C71E RTS C71F iC71F LDA #$02 C721 JSR $C735 C724 iC724 LDA #$02 C726 iC726 EOR #$FF C728 SEC C729 ADC $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C72B LDY $4C C72D BCS $C730 C72F DEY C730 iC730 STA $4B ; Pointer to temp storage in RAM for FN DEF, TAN, &c C732 STY $4C C734 RTS C735 iC735 EOR #$FF C737 SEC C738 ADC $5C C73A LDY $5D C73C BCS $C73F C73E DEY C73F iC73F STA $5C C741 STY $5D C743 RTS C744 iC744 LDY #$01 C746 iC746 LDA ($4B),Y ; Pointer to temp storage in RAM for FN DEF, TAN, &c C748 STA $001F,Y ; Utility Pointer Area C74B DEY C74C BPL $C746 C74E RTS ; cat Concatenate Two Strings C74F iC74F LDA $62 C751 PHA C752 LDA $61 C754 PHA C755 JSR $BE81 ; eval Evaluate Single Term C758 JSR $BD89 ; -Confirm string mode C75B PLA C75C STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 C75E PLA C75F STA $6D ; Floating Accum. #1. Low-Order (Rounding) C761 LDY #$00 C763 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2 C765 CLC C766 ADC ($61),Y C768 BCC $C76F C76A LDX #$B0 C76C JMP $B3CF ; error Error Routine C76F iC76F JSR $C59E C772 JSR $C78C ; movins Store String in High RAM C775 LDA $4D ; Pointer to string, length and garbage collect constant C777 LDY $4E C779 JSR $C7BC C77C JSR $C79E C77F LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2 C781 LDY $6D ; Floating Accum. #1. Low-Order (Rounding) C783 JSR $C7BC C786 JSR $C5F3 C789 JMP $BDB2 ; movins Store String in High RAM C78C iC78C LDY #$00 C78E LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2 C790 PHA C791 INY C792 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2 C794 TAX C795 INY C796 LDA ($6C),Y ; Sign Comparison Result: Accum. # 1 vs #2 C798 TAY C799 PLA C79A iC79A STX $1F ; Utility Pointer Area C79C STY $20 C79E iC79E TAY C79F BEQ $C7AB C7A1 PHA C7A2 iC7A2 DEY C7A3 LDA ($1F),Y ; Utility Pointer Area C7A5 STA ($32),Y ; Utility String Pointer C7A7 TYA C7A8 BNE $C7A2 C7AA PLA C7AB iC7AB CLC C7AC ADC $32 ; Utility String Pointer C7AE STA $32 ; Utility String Pointer C7B0 BCC $C7B4 C7B2 INC $33 C7B4 iC7B4 RTS ; frestr Perform String Housekeeping C7B5 iC7B5 JSR $BD89 ; -Confirm string mode C7B8 iC7B8 LDA $61 C7BA LDY $62 C7BC iC7BC STA $1F ; Utility Pointer Area C7BE STY $20 C7C0 JSR $C811 ; frefac Clean Descriptor Stack C7C3 BNE $C7FE C7C5 JSR $BA4E ; ? C7C8 BCC $C7FE C7CA DEY C7CB LDA #$FF C7CD STA ($1F),Y ; Utility Pointer Area C7CF DEY C7D0 TXA C7D1 STA ($1F),Y ; Utility Pointer Area C7D3 PHA C7D4 EOR #$FF C7D6 SEC C7D7 ADC $1F ; Utility Pointer Area C7D9 LDY $20 C7DB BCS $C7DE C7DD DEY C7DE iC7DE STA $1F ; Utility Pointer Area C7E0 STY $20 C7E2 TAX C7E3 PLA C7E4 CPY $31 C7E6 BNE $C821 C7E8 CPX $30 ; Pointer: Bottom of String Storage C7EA BNE $C821 C7EC PHA C7ED SEC C7EE ADC $30 ; Pointer: Bottom of String Storage C7F0 STA $30 ; Pointer: Bottom of String Storage C7F2 BCC $C7F6 C7F4 INC $31 C7F6 iC7F6 INC $30 ; Pointer: Bottom of String Storage C7F8 BNE $C7FC C7FA INC $31 C7FC iC7FC PLA C7FD RTS C7FE iC7FE LDY #$00 C800 LDA ($1F),Y ; Utility Pointer Area C802 PHA C803 INY C804 LDA ($1F),Y ; Utility Pointer Area C806 TAX C807 INY C808 LDA ($1F),Y ; Utility Pointer Area C80A TAY C80B STX $1F ; Utility Pointer Area C80D STY $20 C80F PLA C810 RTS ; frefac Clean Descriptor Stack C811 iC811 CPY $15 C813 BNE $C821 C815 CMP $14 ; Last Temp String Address C817 BNE $C821 C819 STA $13 ; Pointer Temporary String C81B SBC #$03 C81D STA $14 ; Last Temp String Address C81F LDY #$00 C821 iC821 RTS ; chrd Evaluate C822 JSR $C8D7 C825 TXA C826 PHA C827 LDA #$01 C829 JSR $C5A6 C82C PLA C82D LDY #$00 C82F STA ($5F),Y ; Floating Accum. #1: Mantissa C831 PLA C832 PLA C833 JMP $C5F3 ; leftd Evaluate C836 JSR $C897 ; pream Pull String Parameters C839 CMP ($4D),Y ; Pointer to string, length and garbage collect constant C83B TYA C83C iC83C BCC $C842 C83E LDA ($4D),Y ; Pointer to string, length and garbage collect constant C840 TAX C841 TYA C842 iC842 PHA C843 iC843 TXA C844 iC844 PHA C845 JSR $C5A6 C848 LDA $4D ; Pointer to string, length and garbage collect constant C84A LDY $4E C84C JSR $C7BC C84F PLA C850 TAY C851 PLA C852 CLC C853 ADC $1F ; Utility Pointer Area C855 STA $1F ; Utility Pointer Area C857 BCC $C85B C859 INC $20 C85B iC85B TYA C85C JSR $C79E C85F JMP $C5F3 ; rightd Evaluate C862 JSR $C897 ; pream Pull String Parameters C865 CLC C866 SBC ($4D),Y ; Pointer to string, length and garbage collect constant C868 EOR #$FF C86A JMP $C83C ; midd Evaluate C86D LDA #$FF C86F STA $62 C871 JSR $0076 ; Entry to Get Same Byte of Text Again C874 CMP #$29 C876 BEQ $C87E C878 JSR $BEF5 ; -Test comma- C87B JSR $C8D4 ; -Eval Byte Parameter C87E iC87E JSR $C897 ; pream Pull String Parameters C881 BEQ $C8CE C883 DEX C884 TXA C885 PHA C886 CLC C887 LDX #$00 C889 SBC ($4D),Y ; Pointer to string, length and garbage collect constant C88B BCS $C843 C88D EOR #$FF C88F CMP $62 C891 BCC $C844 C893 LDA $62 C895 BCS $C844 ; pream Pull String Parameters C897 iC897 JSR $BEEF ; chkcls Confirm Character C89A PLA C89B TAY C89C PLA C89D STA $52 C89F PLA C8A0 PLA C8A1 PLA C8A2 TAX C8A3 PLA C8A4 STA $4D ; Pointer to string, length and garbage collect constant C8A6 PLA C8A7 STA $4E C8A9 LDA $52 C8AB PHA C8AC TYA C8AD PHA C8AE LDY #$00 C8B0 TXA C8B1 RTS ; len Evaluate C8B2 JSR $C8B8 ; len1 Exit String Mode C8B5 JMP $C4CB ; len1 Exit String Mode C8B8 iC8B8 JSR $C7B5 ; frestr Perform String Housekeeping C8BB LDX #$00 C8BD STX $07 ; Data Type: $FF = String, $00 = Numeric C8BF TAY C8C0 RTS ; asc Evaluate C8C1 JSR $C8B8 ; len1 Exit String Mode C8C4 BEQ $C8CE C8C6 LDY #$00 C8C8 LDA ($1F),Y ; Utility Pointer Area C8CA TAY C8CB JMP $C4CB C8CE iC8CE JMP $C373 ; - ?ILLEGAL QUANTITY ; gtbytc Evaluate Text to 1 Byte in XR C8D1 iC8D1 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text ; -Eval Byte Parameter C8D4 iC8D4 JSR $BD84 ; frmnum Confirm Result C8D7 iC8D7 JSR $C2E3 C8DA LDX $61 C8DC BNE $C8CE C8DE LDX $62 C8E0 JMP $0076 ; Entry to Get Same Byte of Text Again ; val Evaluate C8E3 JSR $C8B8 ; len1 Exit String Mode C8E6 BNE $C8EB ; strval Convert ASCII String to Flpt C8E8 JMP $CA2D ; strval Convert ASCII String to Flpt C8EB iC8EB LDX $77 ; Pointer: Current Byte of BASIC Text C8ED LDY $78 C8EF STX $6E ; Pointer: Cassette Buffer C8F1 STY $6F C8F3 LDX $1F ; Utility Pointer Area C8F5 STX $77 ; Pointer: Current Byte of BASIC Text C8F7 CLC C8F8 ADC $1F ; Utility Pointer Area C8FA STA $21 C8FC LDX $20 C8FE STX $78 C900 BCC $C903 C902 INX C903 iC903 STX $22 C905 LDY #$00 C907 LDA ($21),Y C909 PHA C90A TYA C90B STA ($21),Y C90D JSR $0076 ; Entry to Get Same Byte of Text Again C910 JSR $CE29 ; fin Convert ASCII String to a Number in FAC#1 C913 PLA C914 LDY #$00 C916 STA ($21),Y C918 iC918 LDX $6E ; Pointer: Cassette Buffer C91A LDY $6F C91C STX $77 ; Pointer: Current Byte of BASIC Text C91E STY $78 C920 RTS ; getnum Get parameters for POKE/WAIT C921 iC921 JSR $BD84 ; frmnum Confirm Result C924 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM C927 iC927 JSR $BEF5 ; -Test comma- C92A JMP $C8D4 ; -Eval Byte Parameter ; getadr Convert FAC#1 to Integer in LINNUM C92D iC92D LDA $63 ; Floating Accum. #1: Sign C92F BMI $C8CE C931 LDA $5E ; Floating-Point Accumulator #1: Exponent C933 CMP #$91 C935 BCS $C8CE C937 JSR $CDD1 ; qint Convert FAC#1 to Integer C93A LDA $61 C93C LDY $62 C93E STY $11 ; Temp: Integer Value C940 STA $12 C942 RTS ; peek Evaluate C943 LDA $12 C945 PHA C946 LDA $11 ; Temp: Integer Value C948 PHA C949 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM C94C LDY #$00 C94E LDA ($11),Y ; Temp: Integer Value C950 TAY C951 PLA C952 STA $11 ; Temp: Integer Value C954 PLA C955 STA $12 C957 JMP $C4CB ; poke Perform [poke] C95A JSR $C921 ; getnum Get parameters for POKE/WAIT C95D TXA C95E LDY #$00 C960 STA ($11),Y ; Temp: Integer Value C962 RTS ; wait Perform [wait] C963 JSR $C921 ; getnum Get parameters for POKE/WAIT C966 STX $46 ; Pointer: Index Variable for FOR/NEXT C968 LDX #$00 C96A JSR $0076 ; Entry to Get Same Byte of Text Again C96D BEQ $C972 C96F JSR $C927 C972 iC972 STX $47 C974 LDY #$00 C976 iC976 LDA ($11),Y ; Temp: Integer Value C978 EOR $47 C97A AND $46 ; Pointer: Index Variable for FOR/NEXT C97C BEQ $C976 C97E iC97E RTS ; faddh Add 0.5 to FAC#1 C97F iC97F LDA #$C7 C981 LDY #$D0 C983 JMP $C99D ; fadd Perform Addition ; fsub Perform Subtraction C986 iC986 JSR $CBC2 ; conupk Load FAC#2 From Memory ; - Evaluate C989 iC989 LDA $63 ; Floating Accum. #1: Sign C98B EOR #$FF C98D STA $63 ; Floating Accum. #1: Sign C98F EOR $6B ; Floating Accum. #2: Sign C991 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 C993 LDA $5E ; Floating-Point Accumulator #1: Exponent C995 JMP $C9A0 ; - Evaluate ; fadd5 Normalise Addition C998 iC998 JSR $CACF C99B BCC $C9D9 ; fadd Perform Addition C99D iC99D JSR $CBC2 ; conupk Load FAC#2 From Memory ; - Evaluate C9A0 iC9A0 BNE $C9A5 C9A2 JMP $CD32 ; movfa Copy FAC#2 into FAC#1 C9A5 iC9A5 LDX $6D ; Floating Accum. #1. Low-Order (Rounding) C9A7 STX $53 C9A9 LDX #$66 C9AB LDA $66 ; Floating-Point Accumulator #2: Exponent C9AD iC9AD TAY C9AE BEQ $C97E C9B0 SEC C9B1 SBC $5E ; Floating-Point Accumulator #1: Exponent C9B3 BEQ $C9D9 C9B5 BCC $C9C9 C9B7 STY $5E ; Floating-Point Accumulator #1: Exponent C9B9 LDY $6B ; Floating Accum. #2: Sign C9BB STY $63 ; Floating Accum. #1: Sign C9BD EOR #$FF C9BF ADC #$00 C9C1 LDY #$00 C9C3 STY $53 C9C5 LDX #$5E C9C7 BNE $C9CD C9C9 iC9C9 LDY #$00 C9CB STY $6D ; Floating Accum. #1. Low-Order (Rounding) C9CD iC9CD CMP #$F9 C9CF BMI $C998 ; fadd5 Normalise Addition C9D1 TAY C9D2 LDA $6D ; Floating Accum. #1. Low-Order (Rounding) C9D4 LSR $01,X ; USR Address [4: C373] C9D6 JSR $CAE6 C9D9 iC9D9 BIT $6C C9DB BPL $CA34 C9DD LDY #$5E C9DF CPX #$66 C9E1 BEQ $C9E5 C9E3 LDY #$66 C9E5 iC9E5 SEC C9E6 EOR #$FF C9E8 ADC $53 C9EA STA $6D ; Floating Accum. #1. Low-Order (Rounding) C9EC LDA $0004,Y ; Flag: Scan for Quote at End of String C9EF SBC $04,X ; Flag: Scan for Quote at End of String C9F1 STA $62 C9F3 LDA $0003,Y ; Search Character C9F6 SBC $03,X ; Search Character C9F8 STA $61 C9FA LDA $0002,Y C9FD SBC $02,X C9FF STA $60 CA01 LDA $0001,Y ; USR Address [4: C373] CA04 SBC $01,X ; USR Address [4: C373] CA06 STA $5F ; Floating Accum. #1: Mantissa CA08 iCA08 BCS $CA0D CA0A JSR $CA7D ; negfac 2's Complement FAC#1 CA0D iCA0D LDY #$00 CA0F TYA CA10 CLC CA11 iCA11 LDX $5F ; Floating Accum. #1: Mantissa CA13 BNE $CA5F CA15 LDX $60 CA17 STX $5F ; Floating Accum. #1: Mantissa CA19 LDX $61 CA1B STX $60 CA1D LDX $62 CA1F STX $61 CA21 LDX $6D ; Floating Accum. #1. Low-Order (Rounding) CA23 STX $62 CA25 STY $6D ; Floating Accum. #1. Low-Order (Rounding) CA27 ADC #$08 CA29 CMP #$20 CA2B BNE $CA11 CA2D iCA2D LDA #$00 CA2F iCA2F STA $5E ; Floating-Point Accumulator #1: Exponent CA31 iCA31 STA $63 ; Floating Accum. #1: Sign CA33 RTS CA34 iCA34 ADC $53 CA36 STA $6D ; Floating Accum. #1. Low-Order (Rounding) CA38 LDA $62 CA3A ADC $6A CA3C STA $62 CA3E LDA $61 CA40 ADC $69 CA42 STA $61 CA44 LDA $60 CA46 ADC $68 CA48 STA $60 CA4A LDA $5F ; Floating Accum. #1: Mantissa CA4C ADC $67 ; Floating Accum. #2: Mantissa CA4E STA $5F ; Floating Accum. #1: Mantissa CA50 JMP $CA6C CA53 iCA53 ADC #$01 CA55 ASL $6D ; Floating Accum. #1. Low-Order (Rounding) CA57 ROL $62 CA59 ROL $61 CA5B ROL $60 CA5D ROL $5F ; Floating Accum. #1: Mantissa CA5F iCA5F BPL $CA53 CA61 SEC CA62 SBC $5E ; Floating-Point Accumulator #1: Exponent CA64 BCS $CA2D CA66 EOR #$FF CA68 ADC #$01 CA6A STA $5E ; Floating-Point Accumulator #1: Exponent CA6C iCA6C BCC $CA7C CA6E iCA6E INC $5E ; Floating-Point Accumulator #1: Exponent CA70 BEQ $CAB4 ; overr Output ?OVERFLOW Error CA72 ROR $5F ; Floating Accum. #1: Mantissa CA74 ROR $60 CA76 ROR $61 CA78 ROR $62 CA7A ROR $6D ; Floating Accum. #1. Low-Order (Rounding) CA7C iCA7C RTS ; negfac 2's Complement FAC#1 CA7D iCA7D LDA $63 ; Floating Accum. #1: Sign CA7F EOR #$FF CA81 STA $63 ; Floating Accum. #1: Sign CA83 iCA83 LDA $5F ; Floating Accum. #1: Mantissa CA85 EOR #$FF CA87 STA $5F ; Floating Accum. #1: Mantissa CA89 LDA $60 CA8B EOR #$FF CA8D STA $60 CA8F LDA $61 CA91 EOR #$FF CA93 STA $61 CA95 LDA $62 CA97 EOR #$FF CA99 STA $62 CA9B LDA $6D ; Floating Accum. #1. Low-Order (Rounding) CA9D EOR #$FF CA9F STA $6D ; Floating Accum. #1. Low-Order (Rounding) CAA1 INC $6D ; Floating Accum. #1. Low-Order (Rounding) CAA3 BNE $CAB3 CAA5 iCAA5 INC $62 CAA7 BNE $CAB3 CAA9 INC $61 CAAB BNE $CAB3 CAAD INC $60 CAAF BNE $CAB3 CAB1 INC $5F ; Floating Accum. #1: Mantissa CAB3 iCAB3 RTS ; overr Output ?OVERFLOW Error CAB4 iCAB4 LDX #$45 CAB6 JMP $B3CF ; error Error Routine ; mulshf Multiply by Zero Byte CAB9 iCAB9 LDX #$22 CABB iCABB LDY $04,X ; Flag: Scan for Quote at End of String CABD STY $6D ; Floating Accum. #1. Low-Order (Rounding) CABF LDY $03,X ; Search Character CAC1 STY $04,X ; Flag: Scan for Quote at End of String CAC3 LDY $02,X CAC5 STY $03,X ; Search Character CAC7 LDY $01,X ; USR Address [4: C373] CAC9 STY $02,X CACB LDY $65 ; Floating -accum. #1: Overflow Digit CACD STY $01,X ; USR Address [4: C373] CACF iCACF ADC #$08 CAD1 BMI $CABB CAD3 BEQ $CABB CAD5 SBC #$08 CAD7 TAY CAD8 LDA $6D ; Floating Accum. #1. Low-Order (Rounding) CADA BCS $CAF0 CADC iCADC ASL $01,X ; USR Address [4: C373] CADE BCC $CAE2 CAE0 INC $01,X ; USR Address [4: C373] CAE2 iCAE2 ROR $01,X ; USR Address [4: C373] CAE4 ROR $01,X ; USR Address [4: C373] CAE6 iCAE6 ROR $02,X CAE8 ROR $03,X ; Search Character CAEA ROR $04,X ; Flag: Scan for Quote at End of String CAEC ROR CAED INY CAEE BNE $CADC CAF0 iCAF0 CLC CAF1 RTS ; fone Table of Flpt Constants DATA ;caf2 1.00 ;caf7 #03 (counter) ;caf8 0.434255942 ;cafd 0.57658454 ;cb02 0.961800759 ;cb07 2.885390073 ;cb0c 0.707106781 SQR(0.5) ;cb11 1.41421356 SRQ(2) ;cb16 -0.5 ;cb1b 0.693147181 LOG(2) ; CAF2 .byte 81 00 00 00 00 03 7F 5E ;.......^ CAFA .byte 56 CB 79 80 13 9B 0B 64 ;vKY....D CB02 .byte 80 76 38 93 16 82 38 AA ;.V8...8. CB0A .byte 3B 20 80 35 04 F3 34 81 ;; .5..4. CB12 .byte 35 04 F3 34 80 80 00 00 ;5..4.... CB1A .byte 00 80 31 72 17 F8 ;..1R.. ; log Evaluate CB20 iCB20 JSR $CD61 ; sign Check Sign of FAC#1 CB23 BEQ $CB27 CB25 BPL $CB2A CB27 iCB27 JMP $C373 ; - ?ILLEGAL QUANTITY CB2A iCB2A LDA $5E ; Floating-Point Accumulator #1: Exponent CB2C SBC #$7F CB2E PHA CB2F LDA #$80 CB31 STA $5E ; Floating-Point Accumulator #1: Exponent CB33 LDA #$0C CB35 LDY #$CB CB37 JSR $C99D ; fadd Perform Addition CB3A LDA #$11 CB3C LDY #$CB CB3E JSR $CC45 ; fdivt Divide FAC#2 by FAC#1 CB41 LDA #$F2 CB43 LDY #$CA CB45 JSR $C986 ; fsub Perform Subtraction CB48 LDA #$F7 CB4A LDY #$CA CB4C JSR $D1D7 ; polyx Series Evaluation CB4F LDA #$16 CB51 LDY #$CB CB53 JSR $C99D ; fadd Perform Addition CB56 PLA CB57 JSR $CEB4 CB5A LDA #$1B CB5C LDY #$CB ; fmult Perform Multiply CB5E iCB5E JSR $CBC2 ; conupk Load FAC#2 From Memory ; - Evaluate CB61 BNE $CB66 CB63 JMP $CBC1 CB66 iCB66 JSR $CBED ; muldiv Test Both Accumulators CB69 LDA #$00 CB6B STA $23 ; Floating-Point Product of Multiply CB6D STA $24 CB6F STA $25 CB71 STA $26 CB73 LDA $6D ; Floating Accum. #1. Low-Order (Rounding) CB75 JSR $CB8F ; mulply Multiply by a Byte CB78 LDA $62 CB7A JSR $CB8F ; mulply Multiply by a Byte CB7D LDA $61 CB7F JSR $CB8F ; mulply Multiply by a Byte CB82 LDA $60 CB84 JSR $CB8F ; mulply Multiply by a Byte CB87 LDA $5F ; Floating Accum. #1: Mantissa CB89 JSR $CB94 CB8C JMP $CCC5 ; mulply Multiply by a Byte CB8F iCB8F BNE $CB94 CB91 JMP $CAB9 ; mulshf Multiply by Zero Byte CB94 iCB94 LSR CB95 ORA #$80 CB97 iCB97 TAY CB98 BCC $CBB3 CB9A CLC CB9B LDA $26 CB9D ADC $6A CB9F STA $26 CBA1 LDA $25 CBA3 ADC $69 CBA5 STA $25 CBA7 LDA $24 CBA9 ADC $68 CBAB STA $24 CBAD LDA $23 ; Floating-Point Product of Multiply CBAF ADC $67 ; Floating Accum. #2: Mantissa CBB1 STA $23 ; Floating-Point Product of Multiply CBB3 iCBB3 ROR $23 ; Floating-Point Product of Multiply CBB5 ROR $24 CBB7 ROR $25 CBB9 ROR $26 CBBB ROR $6D ; Floating Accum. #1. Low-Order (Rounding) CBBD TYA CBBE LSR CBBF BNE $CB97 CBC1 iCBC1 RTS ; conupk Load FAC#2 From Memory CBC2 iCBC2 STA $1F ; Utility Pointer Area CBC4 STY $20 CBC6 LDY #$04 CBC8 LDA ($1F),Y ; Utility Pointer Area CBCA STA $6A CBCC DEY CBCD LDA ($1F),Y ; Utility Pointer Area CBCF STA $69 CBD1 DEY CBD2 LDA ($1F),Y ; Utility Pointer Area CBD4 STA $68 CBD6 DEY CBD7 LDA ($1F),Y ; Utility Pointer Area CBD9 STA $6B ; Floating Accum. #2: Sign CBDB EOR $63 ; Floating Accum. #1: Sign CBDD STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 CBDF LDA $6B ; Floating Accum. #2: Sign CBE1 ORA #$80 CBE3 STA $67 ; Floating Accum. #2: Mantissa CBE5 DEY CBE6 LDA ($1F),Y ; Utility Pointer Area CBE8 STA $66 ; Floating-Point Accumulator #2: Exponent CBEA LDA $5E ; Floating-Point Accumulator #1: Exponent CBEC RTS ; muldiv Test Both Accumulators CBED iCBED LDA $66 ; Floating-Point Accumulator #2: Exponent CBEF iCBEF BEQ $CC10 CBF1 CLC CBF2 ADC $5E ; Floating-Point Accumulator #1: Exponent CBF4 BCC $CBFA CBF6 BMI $CC15 CBF8 CLC CBF9 BIT $1410 ; *** CBF9: ADDRESS DIFFER. This may indicate misassembly *** CBFC ADC #$80 CBFE STA $5E ; Floating-Point Accumulator #1: Exponent CC00 BNE $CC05 CC02 JMP $CA31 CC05 iCC05 LDA $6C ; Sign Comparison Result: Accum. # 1 vs #2 CC07 STA $63 ; Floating Accum. #1: Sign CC09 RTS ; mldvex Overflow / Underflow CC0A iCC0A LDA $63 ; Floating Accum. #1: Sign CC0C EOR #$FF CC0E BMI $CC15 CC10 iCC10 PLA CC11 PLA CC12 JMP $CA2D CC15 iCC15 JMP $CAB4 ; overr Output ?OVERFLOW Error ; mul10 Multiply FAC#1 by 10 CC18 iCC18 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 CC1B TAX CC1C BEQ $CC2E CC1E CLC CC1F ADC #$02 CC21 BCS $CC15 CC23 iCC23 LDX #$00 CC25 STX $6C ; Sign Comparison Result: Accum. # 1 vs #2 CC27 JSR $C9AD CC2A INC $5E ; Floating-Point Accumulator #1: Exponent CC2C BEQ $CC15 CC2E iCC2E RTS ; tenc Constant 10 in Flpt DATA CC2F .byte 84 20 00 00 00 ;. ... ; div10 Divide FAC#1 by 10 CC34 iCC34 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 CC37 LDA #$2F CC39 LDY #$CC CC3B LDX #$00 ; fdiv Divide FAC#2 by Flpt at (AC/YR) CC3D iCC3D STX $6C ; Sign Comparison Result: Accum. # 1 vs #2 CC3F JSR $CCD8 ; movfm Load FAC#1 From Memory CC42 JMP $CC48 ; - Evaluate ; fdivt Divide FAC#2 by FAC#1 CC45 iCC45 JSR $CBC2 ; conupk Load FAC#2 From Memory ; - Evaluate CC48 iCC48 BEQ $CCC0 CC4A JSR $CD51 ; round Round FAC#1 CC4D LDA #$00 CC4F SEC CC50 SBC $5E ; Floating-Point Accumulator #1: Exponent CC52 STA $5E ; Floating-Point Accumulator #1: Exponent CC54 JSR $CBED ; muldiv Test Both Accumulators CC57 INC $5E ; Floating-Point Accumulator #1: Exponent CC59 BEQ $CC15 CC5B LDX #$FC CC5D LDA #$01 CC5F iCC5F LDY $67 ; Floating Accum. #2: Mantissa CC61 CPY $5F ; Floating Accum. #1: Mantissa CC63 BNE $CC75 CC65 LDY $68 CC67 CPY $60 CC69 BNE $CC75 CC6B LDY $69 CC6D CPY $61 CC6F BNE $CC75 CC71 LDY $6A CC73 CPY $62 CC75 iCC75 PHP CC76 ROL CC77 BCC $CC82 CC79 INX CC7A STA $26,X CC7C BEQ $CCB0 CC7E BPL $CCB4 CC80 LDA #$01 CC82 iCC82 PLP CC83 BCS $CC93 CC85 iCC85 ASL $6A CC87 ROL $69 CC89 ROL $68 CC8B ROL $67 ; Floating Accum. #2: Mantissa CC8D BCS $CC75 CC8F BMI $CC5F CC91 BPL $CC75 CC93 iCC93 TAY CC94 LDA $6A CC96 SBC $62 CC98 STA $6A CC9A LDA $69 CC9C SBC $61 CC9E STA $69 CCA0 LDA $68 CCA2 SBC $60 CCA4 STA $68 CCA6 LDA $67 ; Floating Accum. #2: Mantissa CCA8 SBC $5F ; Floating Accum. #1: Mantissa CCAA STA $67 ; Floating Accum. #2: Mantissa CCAC TYA CCAD JMP $CC85 CCB0 iCCB0 LDA #$40 CCB2 BNE $CC82 CCB4 iCCB4 ASL CCB5 ASL CCB6 ASL CCB7 ASL CCB8 ASL CCB9 ASL CCBA STA $6D ; Floating Accum. #1. Low-Order (Rounding) CCBC PLP CCBD JMP $CCC5 CCC0 iCCC0 LDX #$85 CCC2 JMP $B3CF ; error Error Routine CCC5 iCCC5 LDA $23 ; Floating-Point Product of Multiply CCC7 STA $5F ; Floating Accum. #1: Mantissa CCC9 LDA $24 CCCB STA $60 CCCD LDA $25 CCCF STA $61 CCD1 LDA $26 CCD3 STA $62 CCD5 JMP $CA0D ; movfm Load FAC#1 From Memory CCD8 iCCD8 STA $1F ; Utility Pointer Area CCDA STY $20 CCDC LDY #$04 CCDE LDA ($1F),Y ; Utility Pointer Area CCE0 STA $62 CCE2 DEY CCE3 LDA ($1F),Y ; Utility Pointer Area CCE5 STA $61 CCE7 DEY CCE8 LDA ($1F),Y ; Utility Pointer Area CCEA STA $60 CCEC DEY CCED LDA ($1F),Y ; Utility Pointer Area CCEF STA $63 ; Floating Accum. #1: Sign CCF1 ORA #$80 CCF3 STA $5F ; Floating Accum. #1: Mantissa CCF5 DEY CCF6 LDA ($1F),Y ; Utility Pointer Area CCF8 STA $5E ; Floating-Point Accumulator #1: Exponent CCFA STY $6D ; Floating Accum. #1. Low-Order (Rounding) CCFC RTS ; mov2f Store FAC#1 in Memory CCFD iCCFD LDX #$59 CCFF BIT $54A2 ; *** CCFF: ADDRESS DIFFER. This may indicate misassembly *** CD02 LDY #$00 CD04 BEQ $CD0A ; - Store FAC#1 at (AC/YR) CD06 iCD06 LDX $46 ; Pointer: Index Variable for FOR/NEXT CD08 LDY $47 ; - Store FAC#1 at (AC/YR) CD0A iCD0A JSR $CD51 ; round Round FAC#1 CD0D STX $1F ; Utility Pointer Area CD0F STY $20 CD11 LDY #$04 CD13 LDA $62 CD15 STA ($1F),Y ; Utility Pointer Area CD17 DEY CD18 LDA $61 CD1A STA ($1F),Y ; Utility Pointer Area CD1C DEY CD1D LDA $60 CD1F STA ($1F),Y ; Utility Pointer Area CD21 DEY CD22 LDA $63 ; Floating Accum. #1: Sign CD24 ORA #$7F CD26 AND $5F ; Floating Accum. #1: Mantissa CD28 STA ($1F),Y ; Utility Pointer Area CD2A DEY CD2B LDA $5E ; Floating-Point Accumulator #1: Exponent CD2D STA ($1F),Y ; Utility Pointer Area CD2F STY $6D ; Floating Accum. #1. Low-Order (Rounding) CD31 RTS ; movfa Copy FAC#2 into FAC#1 CD32 iCD32 LDA $6B ; Floating Accum. #2: Sign CD34 iCD34 STA $63 ; Floating Accum. #1: Sign CD36 LDX #$05 CD38 iCD38 LDA $65,X ; Floating -accum. #1: Overflow Digit CD3A STA $5D,X CD3C DEX CD3D BNE $CD38 CD3F STX $6D ; Floating Accum. #1. Low-Order (Rounding) CD41 RTS ; movaf Copy FAC#1 into FAC#2 CD42 iCD42 JSR $CD51 ; round Round FAC#1 CD45 iCD45 LDX #$06 CD47 iCD47 LDA $5D,X CD49 STA $65,X ; Floating -accum. #1: Overflow Digit CD4B DEX CD4C BNE $CD47 CD4E STX $6D ; Floating Accum. #1. Low-Order (Rounding) CD50 iCD50 RTS ; round Round FAC#1 CD51 iCD51 LDA $5E ; Floating-Point Accumulator #1: Exponent CD53 BEQ $CD50 CD55 ASL $6D ; Floating Accum. #1. Low-Order (Rounding) CD57 BCC $CD50 CD59 iCD59 JSR $CAA5 CD5C BNE $CD50 CD5E JMP $CA6E ; sign Check Sign of FAC#1 CD61 iCD61 LDA $5E ; Floating-Point Accumulator #1: Exponent CD63 BEQ $CD6E CD65 iCD65 LDA $63 ; Floating Accum. #1: Sign CD67 iCD67 ROL CD68 LDA #$FF CD6A BCS $CD6E CD6C LDA #$01 CD6E iCD6E RTS ; sgn Evaluate CD6F JSR $CD61 ; sign Check Sign of FAC#1 CD72 iCD72 STA $5F ; Floating Accum. #1: Mantissa CD74 LDA #$00 CD76 STA $60 CD78 LDX #$88 CD7A iCD7A LDA $5F ; Floating Accum. #1: Mantissa CD7C EOR #$FF CD7E ROL CD7F iCD7F LDA #$00 CD81 STA $62 CD83 STA $61 CD85 iCD85 STX $5E ; Floating-Point Accumulator #1: Exponent CD87 STA $6D ; Floating Accum. #1. Low-Order (Rounding) CD89 STA $63 ; Floating Accum. #1: Sign CD8B JMP $CA08 ; abs Evaluate CD8E LSR $63 ; Floating Accum. #1: Sign CD90 RTS ; fcomp Compare FAC#1 With Memory CD91 iCD91 STA $21 CD93 iCD93 STY $22 CD95 LDY #$00 CD97 LDA ($21),Y CD99 INY CD9A TAX CD9B BEQ $CD61 ; sign Check Sign of FAC#1 CD9D LDA ($21),Y CD9F EOR $63 ; Floating Accum. #1: Sign CDA1 BMI $CD65 CDA3 CPX $5E ; Floating-Point Accumulator #1: Exponent CDA5 BNE $CDC8 CDA7 LDA ($21),Y CDA9 ORA #$80 CDAB CMP $5F ; Floating Accum. #1: Mantissa CDAD BNE $CDC8 CDAF INY CDB0 LDA ($21),Y CDB2 CMP $60 CDB4 BNE $CDC8 CDB6 INY CDB7 LDA ($21),Y CDB9 CMP $61 CDBB BNE $CDC8 CDBD INY CDBE LDA #$7F CDC0 CMP $6D ; Floating Accum. #1. Low-Order (Rounding) CDC2 LDA ($21),Y CDC4 SBC $62 CDC6 BEQ $CDF0 CDC8 iCDC8 LDA $63 ; Floating Accum. #1: Sign CDCA BCC $CDCE CDCC EOR #$FF CDCE iCDCE JMP $CD67 ; qint Convert FAC#1 to Integer CDD1 iCDD1 LDA $5E ; Floating-Point Accumulator #1: Exponent CDD3 BEQ $CE1F CDD5 SEC CDD6 SBC #$A0 CDD8 BIT $63 CDDA BPL $CDE5 CDDC TAX CDDD LDA #$FF CDDF STA $65 ; Floating -accum. #1: Overflow Digit CDE1 JSR $CA83 CDE4 TXA CDE5 iCDE5 LDX #$5E CDE7 CMP #$F9 CDE9 BPL $CDF1 CDEB JSR $CACF CDEE STY $65 ; Floating -accum. #1: Overflow Digit CDF0 iCDF0 RTS CDF1 iCDF1 TAY CDF2 LDA $63 ; Floating Accum. #1: Sign CDF4 AND #$80 CDF6 LSR $5F ; Floating Accum. #1: Mantissa CDF8 ORA $5F ; Floating Accum. #1: Mantissa CDFA STA $5F ; Floating Accum. #1: Mantissa CDFC JSR $CAE6 CDFF STY $65 ; Floating -accum. #1: Overflow Digit CE01 RTS ; int Evaluate CE02 iCE02 LDA $5E ; Floating-Point Accumulator #1: Exponent CE04 CMP #$A0 CE06 BCS $CE28 CE08 JSR $CDD1 ; qint Convert FAC#1 to Integer CE0B STY $6D ; Floating Accum. #1. Low-Order (Rounding) CE0D LDA $63 ; Floating Accum. #1: Sign CE0F STY $63 ; Floating Accum. #1: Sign CE11 EOR #$80 CE13 ROL CE14 LDA #$A0 CE16 STA $5E ; Floating-Point Accumulator #1: Exponent CE18 LDA $62 CE1A STA $03 ; Search Character CE1C JMP $CA08 CE1F iCE1F STA $5F ; Floating Accum. #1: Mantissa CE21 STA $60 CE23 STA $61 CE25 STA $62 CE27 TAY CE28 iCE28 RTS ; fin Convert ASCII String to a Number in FAC#1 CE29 iCE29 LDY #$00 CE2B LDX #$0A CE2D iCE2D STY $5A,X CE2F DEX CE30 BPL $CE2D CE32 BCC $CE43 CE34 CMP #$2D CE36 BNE $CE3C CE38 STX $64 ; Pointer: Series Evaluation Constant Pointer CE3A BEQ $CE40 CE3C iCE3C CMP #$2B CE3E BNE $CE45 CE40 iCE40 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text CE43 iCE43 BCC $CEA0 CE45 iCE45 CMP #$2E CE47 BEQ $CE77 CE49 CMP #$45 CE4B BNE $CE7D CE4D JSR $0070 ; Subroutine: Get Next Byte of BASIC Text CE50 BCC $CE69 CE52 CMP #$AB CE54 BEQ $CE64 CE56 CMP #$2D CE58 BEQ $CE64 CE5A CMP #$AA CE5C BEQ $CE66 CE5E CMP #$2B CE60 BEQ $CE66 CE62 BNE $CE6B CE64 iCE64 ROR $5D CE66 iCE66 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text CE69 iCE69 BCC $CEC7 CE6B iCE6B BIT $5D CE6D BPL $CE7D CE6F LDA #$00 CE71 SEC CE72 SBC $5B CE74 JMP $CE7F CE77 iCE77 ROR $5C CE79 BIT $5C CE7B BVC $CE40 CE7D iCE7D LDA $5B CE7F iCE7F SEC CE80 SBC $5A CE82 STA $5B CE84 BEQ $CE98 CE86 BPL $CE91 CE88 iCE88 JSR $CC34 ; div10 Divide FAC#1 by 10 CE8B INC $5B CE8D BNE $CE88 CE8F BEQ $CE98 CE91 iCE91 JSR $CC18 ; mul10 Multiply FAC#1 by 10 CE94 DEC $5B CE96 BNE $CE91 CE98 iCE98 LDA $64 ; Pointer: Series Evaluation Constant Pointer CE9A BMI $CE9D CE9C RTS CE9D iCE9D JMP $D14B ; negop Negate FAC#1 CEA0 iCEA0 PHA CEA1 BIT $5C CEA3 BPL $CEA7 CEA5 INC $5A CEA7 iCEA7 JSR $CC18 ; mul10 Multiply FAC#1 by 10 CEAA PLA CEAB SEC CEAC SBC #$30 CEAE JSR $CEB4 CEB1 JMP $CE40 CEB4 iCEB4 PHA CEB5 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 CEB8 PLA CEB9 JSR $CD72 CEBC LDA $6B ; Floating Accum. #2: Sign CEBE EOR $63 ; Floating Accum. #1: Sign CEC0 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 CEC2 LDX $5E ; Floating-Point Accumulator #1: Exponent CEC4 JMP $C9A0 ; - Evaluate CEC7 iCEC7 LDA $5B CEC9 CMP #$0A CECB BCC $CED6 CECD LDA #$64 CECF BIT $5D CED1 BMI $CEE4 CED3 JMP $CAB4 ; overr Output ?OVERFLOW Error CED6 iCED6 ASL CED7 ASL CED8 CLC CED9 ADC $5B CEDB ASL CEDC CLC CEDD LDY #$00 CEDF ADC ($77),Y ; Pointer: Current Byte of BASIC Text CEE1 SEC CEE2 SBC #$30 CEE4 iCEE4 STA $5B CEE6 JMP $CE66 ; n0999 String Conversion Constants DATA ;cee9 99999999.9 ;ceee 999999999 ;cef3 1000000000 ; CEE9 .byte 9B 3E BC 1F FD 9E 6E 6B ;.>....NK CEF1 .byte 27 FD 9E 6E 6B 28 00 ;'..NK(. ; Unused EMPTY CEF8 .byte F9 AA AA AA AA AA AA AA ;........ CF00 .byte AA AA AA AA AA AA AA AA ;........ CF08 .byte AA AA AA AA AA AA AA AA ;........ CF10 .byte AA AA AA AA AA AA AA AA ;........ CF18 .byte AA AA AA AA AA AA AA AA ;........ CF20 .byte AA AA AA AA AA AA AA AA ;........ CF28 .byte AA AA AA AA AA AA AA AA ;........ CF30 .byte AA AA AA AA AA AA AA AA ;........ CF38 .byte AA AA AA AA AA AA AA AA ;........ CF40 .byte AA AA AA AA AA AA AA AA ;........ CF48 .byte AA AA AA AA AA AA AA AA ;........ CF50 .byte AA AA AA AA AA AA AA AA ;........ CF58 .byte AA AA AA AA AA AA AA AA ;........ CF60 .byte AA AA AA AA AA AA AA AA ;........ CF68 .byte AA AA AA AA AA AA AA AA ;........ CF70 .byte AA AA AA AA AA AA AA AA ;........ ; inprt Output 'IN' and Line Number CF78 iCF78 LDA #$0D CF7A LDY #$B3 CF7C JSR $CF90 CF7F LDA $37 CF81 LDX $36 ; Current BASIC Line Number CF83 iCF83 STA $5F ; Floating Accum. #1: Mantissa CF85 STX $60 CF87 LDX #$90 CF89 SEC CF8A JSR $CD7F CF8D JSR $CF93 ; fout Convert FAC#1 to ASCII String CF90 iCF90 JMP $BB1D ; strout Output String ; fout Convert FAC#1 to ASCII String CF93 iCF93 LDY #$01 CF95 iCF95 LDA #$20 CF97 BIT $63 CF99 BPL $CF9D CF9B LDA #$2D CF9D iCF9D STA $00FF,Y ; Not used CFA0 STA $63 ; Floating Accum. #1: Sign CFA2 STY $6E ; Pointer: Cassette Buffer CFA4 INY CFA5 LDA #$30 CFA7 LDX $5E ; Floating-Point Accumulator #1: Exponent CFA9 BNE $CFAE CFAB JMP $D0BA CFAE iCFAE LDA #$00 CFB0 CPX #$80 CFB2 BEQ $CFB6 CFB4 BCS $CFBF CFB6 iCFB6 LDA #$F3 CFB8 LDY #$CE CFBA JSR $CB5E ; fmult Perform Multiply CFBD LDA #$F7 CFBF iCFBF STA $5A CFC1 iCFC1 LDA #$EE CFC3 LDY #$CE CFC5 JSR $CD91 ; fcomp Compare FAC#1 With Memory CFC8 BEQ $CFE8 CFCA BPL $CFDE CFCC iCFCC LDA #$E9 CFCE LDY #$CE CFD0 JSR $CD91 ; fcomp Compare FAC#1 With Memory CFD3 BEQ $CFD7 CFD5 BPL $CFE5 CFD7 iCFD7 JSR $CC18 ; mul10 Multiply FAC#1 by 10 CFDA DEC $5A CFDC BNE $CFCC CFDE iCFDE JSR $CC34 ; div10 Divide FAC#1 by 10 CFE1 INC $5A CFE3 BNE $CFC1 CFE5 iCFE5 JSR $C97F ; faddh Add 0.5 to FAC#1 CFE8 iCFE8 JSR $CDD1 ; qint Convert FAC#1 to Integer CFEB LDX #$01 CFED LDA $5A CFEF CLC CFF0 ADC #$0A CFF2 BMI $CFFD CFF4 CMP #$0B CFF6 BCS $CFFE CFF8 ADC #$FF CFFA TAX CFFB LDA #$02 CFFD iCFFD SEC CFFE iCFFE SBC #$02 D000 STA $5B D002 STX $5A D004 TXA D005 BEQ $D009 D007 BPL $D01C D009 iD009 LDY $6E ; Pointer: Cassette Buffer D00B LDA #$2E D00D INY D00E STA $00FF,Y ; Not used D011 TXA D012 BEQ $D01A D014 LDA #$30 D016 INY D017 STA $00FF,Y ; Not used D01A iD01A STY $6E ; Pointer: Cassette Buffer D01C iD01C LDY #$00 ; foutim Convert TI to String D01E iD01E LDX #$80 D020 iD020 LDA $62 D022 CLC D023 ADC $D0CF,Y D026 STA $62 D028 LDA $61 D02A ADC $D0CE,Y D02D STA $61 D02F LDA $60 D031 ADC $D0CD,Y D034 STA $60 D036 LDA $5F ; Floating Accum. #1: Mantissa D038 ADC $D0CC,Y D03B STA $5F ; Floating Accum. #1: Mantissa D03D INX D03E BCS $D044 D040 BPL $D020 D042 BMI $D046 D044 iD044 BMI $D020 D046 iD046 TXA D047 BCC $D04D D049 EOR #$FF D04B ADC #$0A D04D iD04D ADC #$2F D04F INY D050 INY D051 INY D052 INY D053 STY $44 ; Pointer: Current BASIC Variable Data D055 LDY $6E ; Pointer: Cassette Buffer D057 INY D058 TAX D059 AND #$7F D05B STA $00FF,Y ; Not used D05E DEC $5A D060 BNE $D068 D062 LDA #$2E D064 INY D065 STA $00FF,Y ; Not used D068 iD068 STY $6E ; Pointer: Cassette Buffer D06A LDY $44 ; Pointer: Current BASIC Variable Data D06C TXA D06D EOR #$FF D06F AND #$80 D071 TAX D072 CPY #$24 D074 BEQ $D07A D076 CPY #$3C D078 BNE $D020 D07A iD07A LDY $6E ; Pointer: Cassette Buffer D07C iD07C LDA $00FF,Y ; Not used D07F DEY D080 CMP #$30 D082 BEQ $D07C D084 CMP #$2E D086 BEQ $D089 D088 INY D089 iD089 LDA #$2B D08B LDX $5B D08D BEQ $D0BD D08F BPL $D099 D091 LDA #$00 D093 SEC D094 SBC $5B D096 TAX D097 LDA #$2D D099 iD099 STA $0101,Y D09C LDA #$45 D09E STA $0100,Y ; Micro-Processor System Stack Area D0A1 TXA D0A2 LDX #$2F D0A4 SEC D0A5 iD0A5 INX D0A6 SBC #$0A D0A8 BCS $D0A5 D0AA ADC #$3A D0AC STA $0103,Y D0AF TXA D0B0 STA $0102,Y D0B3 LDA #$00 D0B5 STA $0104,Y D0B8 BEQ $D0C2 D0BA iD0BA STA $00FF,Y ; Not used D0BD iD0BD LDA #$00 D0BF STA $0100,Y ; Micro-Processor System Stack Area D0C2 iD0C2 LDA #$00 D0C4 LDY #$01 D0C6 RTS ; fhalf Table of Constants DATA ;d0c7 0.5 ; This table is used in converting numbers to ascii. ;d0cc 4-byte powers of 10 ;d0f0 TI Constants ; D0C7 .byte 80 00 00 00 00 ;..... D0CC sD0CC .byte FA ;. D0CD sD0CD .byte 0A ;. D0CE sD0CE .byte 1F ;. D0CF sD0CF .byte 00 00 98 96 80 FF F0 BD ;........ D0D7 .byte C0 00 01 86 A0 FF FF D8 ;.......X D0DF .byte F0 00 00 03 E8 FF FF FF ;........ D0E7 .byte 9C 00 00 00 0A FF FF FF ;........ D0EF .byte FF FF DF 0A 80 00 03 4B ;.......k D0F7 .byte C0 FF FF 73 60 00 00 0E ;...S`... D0FF .byte 10 FF FF FD A8 00 00 00 ;........ D107 .byte 3C ;< ; sqr Evaluate D108 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 D10B LDA #$C7 D10D LDY #$D0 D10F JSR $CCD8 ; movfm Load FAC#1 From Memory ; fpwrt Evaluate D112 BEQ $D184 ; exp Evaluate D114 LDA $66 ; Floating-Point Accumulator #2: Exponent D116 BNE $D11B D118 JMP $CA2F D11B iD11B LDX #$4B D11D LDY #$00 D11F JSR $CD0A ; - Store FAC#1 at (AC/YR) D122 LDA $6B ; Floating Accum. #2: Sign D124 BPL $D135 D126 JSR $CE02 ; int Evaluate D129 LDA #$4B D12B LDY #$00 D12D JSR $CD91 ; fcomp Compare FAC#1 With Memory D130 BNE $D135 D132 TYA D133 LDY $03 ; Search Character D135 iD135 JSR $CD34 D138 TYA D139 PHA D13A JSR $CB20 ; log Evaluate D13D LDA #$4B D13F LDY #$00 D141 JSR $CB5E ; fmult Perform Multiply D144 JSR $D184 ; exp Evaluate D147 PLA D148 LSR D149 BCC $D155 ; negop Negate FAC#1\- Evaluate D14B iD14B LDA $5E ; Floating-Point Accumulator #1: Exponent D14D BEQ $D155 D14F LDA $63 ; Floating Accum. #1: Sign D151 EOR #$FF D153 STA $63 ; Floating Accum. #1: Sign D155 iD155 RTS ; logeb2 Table of Constants DATA ;d156 1.44269504 (1/LOG to base 2 e) ;d15b #07 (counter) ;d15c 2.149875 E-5 ;d161 1.435231 E-4 ;d166 1.342263 E-3 ;d16b 9.6414017 E-3 ;d170 5.550513 E-2 ;d175 2.402263 E-4 ;d17a 6.931471 E-1 ;d17f 1.00 ; D156 .byte 81 38 AA 3B 29 07 71 34 ;.8.;).Q4 D15E .byte 58 3E 56 74 16 7E B3 1B ;x>vT.~.. D166 .byte 77 2F EE E3 85 7A 1D 84 ;W/...Z.. D16E .byte 1C 2A 7C 63 59 58 0A 7E ;.*|Cyx.~ D176 .byte 75 FD E7 C6 80 31 72 18 ;U..F.1R. D17E .byte 10 81 00 00 00 00 ;...... ; exp Evaluate D184 iD184 LDA #$56 D186 LDY #$D1 D188 JSR $CB5E ; fmult Perform Multiply D18B LDA $6D ; Floating Accum. #1. Low-Order (Rounding) D18D ADC #$50 D18F BCC $D194 D191 JSR $CD59 D194 iD194 STA $53 D196 JSR $CD45 D199 LDA $5E ; Floating-Point Accumulator #1: Exponent D19B CMP #$88 D19D BCC $D1A2 D19F iD19F JSR $CC0A ; mldvex Overflow / Underflow D1A2 iD1A2 JSR $CE02 ; int Evaluate D1A5 LDA $03 ; Search Character D1A7 CLC D1A8 ADC #$81 D1AA BEQ $D19F D1AC SEC D1AD SBC #$01 D1AF PHA D1B0 LDX #$05 D1B2 iD1B2 LDA $66,X ; Floating-Point Accumulator #2: Exponent D1B4 LDY $5E,X ; Floating-Point Accumulator #1: Exponent D1B6 STA $5E,X ; Floating-Point Accumulator #1: Exponent D1B8 STY $66,X ; Floating-Point Accumulator #2: Exponent D1BA DEX D1BB BPL $D1B2 D1BD LDA $53 D1BF STA $6D ; Floating Accum. #1. Low-Order (Rounding) D1C1 JSR $C989 ; - Evaluate D1C4 JSR $D14B ; negop Negate FAC#1 D1C7 LDA #$5B D1C9 LDY #$D1 D1CB JSR $D1ED D1CE LDA #$00 D1D0 STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 D1D2 PLA D1D3 JSR $CBEF D1D6 RTS ; polyx Series Evaluation D1D7 iD1D7 STA $6E ; Pointer: Cassette Buffer D1D9 STY $6F D1DB JSR $CD00 D1DE LDA #$54 D1E0 JSR $CB5E ; fmult Perform Multiply D1E3 JSR $D1F1 D1E6 LDA #$54 D1E8 LDY #$00 D1EA JMP $CB5E ; fmult Perform Multiply D1ED iD1ED STA $6E ; Pointer: Cassette Buffer D1EF STY $6F D1F1 iD1F1 JSR $CCFD ; mov2f Store FAC#1 in Memory D1F4 LDA ($6E),Y ; Pointer: Cassette Buffer D1F6 STA $64 ; Pointer: Series Evaluation Constant Pointer D1F8 LDY $6E ; Pointer: Cassette Buffer D1FA INY D1FB TYA D1FC BNE $D200 D1FE INC $6F D200 iD200 STA $6E ; Pointer: Cassette Buffer D202 LDY $6F D204 iD204 JSR $CB5E ; fmult Perform Multiply D207 LDA $6E ; Pointer: Cassette Buffer D209 LDY $6F D20B CLC D20C ADC #$05 D20E BCC $D211 D210 INY D211 iD211 STA $6E ; Pointer: Cassette Buffer D213 STY $6F D215 JSR $C99D ; fadd Perform Addition D218 LDA #$59 D21A LDY #$00 D21C DEC $64 ; Pointer: Series Evaluation Constant Pointer D21E BNE $D204 D220 RTS ; rmulc Constants for RND DATA D221 .byte 98 35 44 7A 68 28 B1 46 ;.5dZH(.f ; rnd Evaluate D229 JSR $CD61 ; sign Check Sign of FAC#1 D22C BMI $D25C D22E BNE $D247 D230 LDA $E844 D233 STA $5F ; Floating Accum. #1: Mantissa D235 LDA $E848 D238 STA $60 D23A LDA $E845 D23D STA $61 D23F LDA $E849 D242 STA $62 D244 JMP $D26C D247 iD247 LDA #$88 D249 LDY #$00 D24B JSR $CCD8 ; movfm Load FAC#1 From Memory D24E LDA #$21 D250 LDY #$D2 D252 JSR $CB5E ; fmult Perform Multiply D255 LDA #$25 D257 LDY #$D2 D259 JSR $C99D ; fadd Perform Addition D25C iD25C LDX $62 D25E LDA $5F ; Floating Accum. #1: Mantissa D260 STA $62 D262 STX $5F ; Floating Accum. #1: Mantissa D264 LDX $60 D266 LDA $61 D268 STA $60 D26A STX $61 D26C iD26C LDA #$00 D26E STA $63 ; Floating Accum. #1: Sign D270 LDA $5E ; Floating-Point Accumulator #1: Exponent D272 STA $6D ; Floating Accum. #1. Low-Order (Rounding) D274 LDA #$80 D276 STA $5E ; Floating-Point Accumulator #1: Exponent D278 JSR $CA0D D27B LDX #$88 D27D LDY #$00 D27F iD27F JMP $CD0A ; - Store FAC#1 at (AC/YR) ; cos Evaluate D282 LDA #$FE D284 LDY #$D2 D286 JSR $C99D ; fadd Perform Addition ; sin Evaluate D289 iD289 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 D28C LDA #$03 D28E LDY #$D3 D290 LDX $6B ; Floating Accum. #2: Sign D292 JSR $CC3D ; fdiv Divide FAC#2 by Flpt at (AC/YR) D295 JSR $CD42 ; movaf Copy FAC#1 into FAC#2 D298 JSR $CE02 ; int Evaluate D29B LDA #$00 D29D STA $6C ; Sign Comparison Result: Accum. # 1 vs #2 D29F JSR $C989 ; - Evaluate D2A2 LDA #$08 D2A4 LDY #$D3 D2A6 JSR $C986 ; fsub Perform Subtraction D2A9 LDA $63 ; Floating Accum. #1: Sign D2AB PHA D2AC BPL $D2BB D2AE JSR $C97F ; faddh Add 0.5 to FAC#1 D2B1 LDA $63 ; Floating Accum. #1: Sign D2B3 BMI $D2BE D2B5 LDA $0C ; Flag TAN sign / Comparison Result D2B7 EOR #$FF D2B9 STA $0C ; Flag TAN sign / Comparison Result D2BB iD2BB JSR $D14B ; negop Negate FAC#1 D2BE iD2BE LDA #$08 D2C0 LDY #$D3 D2C2 JSR $C99D ; fadd Perform Addition D2C5 PLA D2C6 BPL $D2CB D2C8 JSR $D14B ; negop Negate FAC#1 D2CB iD2CB LDA #$0D D2CD LDY #$D3 D2CF JMP $D1D7 ; polyx Series Evaluation ; tan Evaluate D2D2 JSR $CD00 D2D5 LDA #$00 D2D7 STA $0C ; Flag TAN sign / Comparison Result D2D9 JSR $D289 ; sin Evaluate D2DC LDX #$4B D2DE LDY #$00 D2E0 JSR $D27F D2E3 LDA #$54 D2E5 LDY #$00 D2E7 JSR $CCD8 ; movfm Load FAC#1 From Memory D2EA LDA #$00 D2EC STA $63 ; Floating Accum. #1: Sign D2EE LDA $0C ; Flag TAN sign / Comparison Result D2F0 JSR $D2FA D2F3 LDA #$4B D2F5 LDY #$00 D2F7 JMP $CC45 ; fdivt Divide FAC#2 by FAC#1 D2FA iD2FA PHA D2FB JMP $D2BB ; pi2 Table of Trig Constants DATA ;d2fe 1.570796327 pi/2 ;d303 6.28318531 pi*2 ;d308 0.25 ; ;d30d #05 (counter) ;d30e -14.3813907 ;d313 42.0077971 ;d318 -76.7041703 ;d31d 81.6052237 ;d322 -41.3417021 ;d327 6.28318531 ; D2FE .byte 81 49 0F DA A2 83 49 0F ;.i.Z..i. D306 .byte DA A2 7F 00 00 00 00 05 ;Z....... D30E .byte 84 E6 1A 2D 1B 86 28 07 ;...-..(. D316 .byte FB F8 87 99 68 89 01 87 ;....H... D31E .byte 23 35 DF E1 86 A5 5D E7 ;#5....]. D326 .byte 28 83 49 0F DA A2 ;(.i.Z. ; atn Evaluate D32C LDA $63 ; Floating Accum. #1: Sign D32E PHA D32F BPL $D334 D331 JSR $D14B ; negop Negate FAC#1 D334 iD334 LDA $5E ; Floating-Point Accumulator #1: Exponent D336 PHA D337 CMP #$81 D339 BCC $D342 D33B LDA #$F2 D33D LDY #$CA D33F JSR $CC45 ; fdivt Divide FAC#2 by FAC#1 D342 iD342 LDA #$5C D344 LDY #$D3 D346 JSR $D1D7 ; polyx Series Evaluation D349 PLA D34A CMP #$81 D34C BCC $D355 D34E LDA #$FE D350 LDY #$D2 D352 JSR $C986 ; fsub Perform Subtraction D355 iD355 PLA D356 BPL $D35B D358 JMP $D14B ; negop Negate FAC#1 D35B iD35B RTS ; atncon Table of ATN Constants DATA ;d35c #0b (counter) ;d35d -0.000684793912 ;d362 0.00485094216 ;d367 -0.161117018 ;d36c 0.034209638 ;d371 -0.0542791328 ;d376 0.0724571965 ;d37b -0.0898023954 ;d380 0.110932413 ;d385 -0.142839808 ;d38a 0.19999912 ;d38f -0.333333316 ;d394 1.00 ; D35C .byte 0B 76 B3 83 BD D3 79 1E ;.V...SY. D364 .byte F4 A6 F5 7B 83 FC B0 10 ;...{.... D36C .byte 7C 0C 1F 67 CA 7C DE 53 ;|..GJ|.s D374 .byte CB C1 7D 14 64 70 4C 7D ;KA}.DPl} D37C .byte B7 EA 51 7A 7D 63 30 88 ;..qZ}C0. D384 .byte 7E 7E 92 44 99 3A 7E 4C ;~~.d.:~l D38C .byte CC 91 C7 7F AA AA AA 13 ;L.G..... D394 .byte 81 00 00 00 ;.... D398 sD398 .byte 00 ;. ; initat CHRGET For Zero-page D399 iD399 INC $77 ; Pointer: Current Byte of BASIC Text D39B BNE $D39F D39D INC $78 D39F iD39F LDA $EA60 D3A2 CMP #$3A D3A4 BCS $D3B0 D3A6 CMP #$20 D3A8 BEQ $D399 ; initat CHRGET For Zero-page D3AA SEC D3AB SBC #$30 D3AD SEC D3AE SBC #$D0 D3B0 iD3B0 RTS ; rndsed RND Seed For zero-page DATA ;d3b1 0.811635157 D3B1 .byte 80 4F C7 52 58 ;.oGrx ; initcz Initialize BASIC RAM D3B6 iD3B6 LDX #$FB D3B8 TXS D3B9 LDA #$4C D3BB STA $51 D3BD STA $00 ; USR Function Jump Instr (4C) D3BF LDA #$73 D3C1 LDY #$C3 D3C3 STA $01 ; USR Address [4: C373] D3C5 STY $02 D3C7 LDX #$1C D3C9 iD3C9 LDA $D398,X D3CC STA $6F,X D3CE DEX D3CF BNE $D3C9 D3D1 LDA #$03 D3D3 STA $50 D3D5 TXA D3D6 STA $65 ; Floating -accum. #1: Overflow Digit D3D8 STA $10 ; 3: width of source (unused - from TTY) D3DA STA $15 D3DC STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve D3DE PHA D3DF INX D3E0 STX $01FD D3E3 STX $01FC D3E6 LDX #$16 D3E8 STX $13 ; Pointer Temporary String D3EA LDY #$04 D3EC STA $28 ; Pointer: Start of BASIC Text [0401] D3EE STY $29 D3F0 STA $11 ; Temp: Integer Value D3F2 STY $12 D3F4 TAY D3F5 LDA #$80 D3F7 BNE $D400 D3F9 LDA #$00 D3FB LDY #$B0 D3FD JMP $D41B D400 iD400 INC $11 ; Temp: Integer Value D402 BNE $D408 D404 INC $12 D406 BMI $D417 ; initms Output Power-Up Message D408 iD408 LDA #$55 D40A STA ($11),Y ; Temp: Integer Value D40C CMP ($11),Y ; Temp: Integer Value D40E BNE $D417 ; initms Output Power-Up Message D410 ASL D411 STA ($11),Y ; Temp: Integer Value D413 CMP ($11),Y ; Temp: Integer Value D415 BEQ $D400 ; initms Output Power-Up Message D417 iD417 LDA $11 ; Temp: Integer Value D419 LDY $12 D41B iD41B STA $34 ; Pointer: Highest Address Used by BASIC D41D STY $35 D41F STA $30 ; Pointer: Bottom of String Storage D421 STY $31 D423 LDY #$00 D425 TYA D426 STA ($28),Y ; Pointer: Start of BASIC Text [0401] D428 INC $28 ; Pointer: Start of BASIC Text [0401] D42A LDA #$A4 D42C LDY #$DE D42E JSR $BB1D ; strout Output String D431 LDA $34 ; Pointer: Highest Address Used by BASIC D433 SEC D434 SBC $28 ; Pointer: Start of BASIC Text [0401] D436 TAX D437 LDA $35 D439 SBC $29 D43B JSR $CF83 D43E LDA #$4B D440 LDY #$D4 D442 JSR $BB1D ; strout Output String D445 JSR $B5D4 D448 JMP $B3FF ; ready Restart BASIC ; words Power-Up Message DATA D44B .byte 20 42 59 54 45 53 20 46 ; bytes f D453 .byte 52 45 45 0D 00 23 23 23 ;ree..### D45B .byte 20 43 4F 4D 4D 4F 44 4F ; commodo D463 .byte 52 45 20 42 41 53 49 43 ;re basic D46B .byte 20 23 23 23 0D 0D 00 ; ###... ; Perform [monitor] D472 iD472 LDA #$43 D474 STA $B5 D476 BNE $D491 ; Break Entry D478 JSR $F2A6 ; clrchn Restore Default I/O D47B LDA #$42 D47D STA $B5 D47F CLD D480 LSR D481 PLA D482 STA $0205 D485 PLA D486 STA $0204 D489 PLA D48A STA $0203 D48D PLA D48E STA $0202 D491 iD491 PLA D492 ADC #$FF D494 STA $0201 D497 PLA D498 ADC #$FF D49A STA $0200 ; System INPUT Buffer D49D LDA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455] D49F STA $0208 D4A2 LDA $91 D4A4 STA $0207 D4A7 TSX D4A8 STX $0206 D4AB CLI D4AC JSR $D534 ; New Line D4AF LDX $B5 D4B1 LDA #$2A D4B3 JSR $D731 ; Output 2 Ascii Chars D4B6 LDA #$52 D4B8 BNE $D4D4 ; *Get Command D4BA iD4BA LDA #$02 D4BC STA $77 ; Pointer: Current Byte of BASIC Text D4BE LDA #$00 D4C0 STA $DE ; Cassette Read / Write Block Count D4C2 LDX #$0D D4C4 LDA #$2E D4C6 JSR $D731 ; Output 2 Ascii Chars D4C9 iD4C9 JSR $D798 ; ? D4CC CMP #$2E D4CE BEQ $D4C9 D4D0 CMP #$20 D4D2 BEQ $D4C9 D4D4 iD4D4 LDX #$07 D4D6 iD4D6 CMP $D544,X ; Commands DATA D4D9 BNE $D4E6 D4DB STX $B4 D4DD LDA $D54C,X ; Command Vectors DATA D4E0 PHA D4E1 LDA $D554,X D4E4 PHA D4E5 RTS D4E6 iD4E6 DEX D4E7 BPL $D4D6 D4E9 JMP ($03FA) ; Monitor extension vector [D7A4] D4EC iD4EC LDA $FB ; I/O Start Address D4EE STA $0201 D4F1 LDA $FC D4F3 STA $0200 ; System INPUT Buffer D4F6 RTS ; Display Memory D4F7 iD4F7 STA $B5 D4F9 LDY #$00 D4FB iD4FB JSR $D531 ; Print Space D4FE LDA ($FB),Y ; I/O Start Address D500 JSR $D722 ; Output 2-digit Byte D503 JSR $D539 ; Increment Pointer D506 DEC $B5 D508 BNE $D4FB D50A RTS ; ? D50B iD50B JSR $D763 ; Input Hex Byte D50E BCC $D51D D510 LDX #$00 D512 STA ($FB,X) ; I/O Start Address D514 CMP ($FB,X) ; I/O Start Address D516 BEQ $D51D D518 PLA D519 PLA D51A JMP $D7A4 ; Print '?' D51D iD51D JSR $D539 ; Increment Pointer D520 DEC $B5 D522 RTS ; ? D523 iD523 LDA #$02 D525 STA $FB ; I/O Start Address D527 LDA #$02 D529 STA $FC D52B LDA #$05 D52D RTS D52E iD52E JSR $D531 ; Print Space ; Print Space D531 iD531 LDA #$20 D533 BIT $0DA9 ; *** Resyncing *** ; New Line D534 iD534 LDA #$0D D536 JMP $F266 ; chrout Output One Character ; Increment Pointer D539 iD539 INC $FB ; I/O Start Address D53B BNE $D543 D53D INC $FC D53F BNE $D543 D541 INC $DE ; Cassette Read / Write Block Count D543 iD543 RTS ; Commands DATA D544 sD544 .byte 3A 3B 52 4D 47 58 4C 53 ;:;rmgxls ; Command Vectors DATA D54C sD54C .byte D6 D5 D5 D5 D6 D6 D6 D6 ;VUUUVVVV D554 sD554 .byte 1C FA 86 BB 32 6A 74 74 ;....2JTT ; ' pc irq sr ac xr yr sp' DATA D55C sD55C .byte 0D 20 20 20 20 20 50 43 ;. pc D564 .byte 20 20 49 52 51 20 20 53 ; irq s D56C .byte 52 20 41 43 20 58 52 20 ;r ac xr D574 .byte 59 52 20 53 50 ;yr sp ; Do New Line D579 iD579 TYA D57A PHA D57B JSR $D534 ; New Line D57E PLA D57F LDX #$2E D581 JSR $D731 ; Output 2 Ascii Chars D584 JMP $D52E ; Perform [r] D587 LDX #$00 D589 iD589 LDA $D55C,X ; ' pc irq sr ac xr yr sp' DATA D58C JSR $F266 ; chrout Output One Character D58F INX D590 CPX #$1D D592 BNE $D589 D594 LDY #$3B D596 JSR $D579 ; Do New Line D599 LDA $0200 ; System INPUT Buffer D59C JSR $D722 ; Output 2-digit Byte D59F LDA $0201 D5A2 JSR $D722 ; Output 2-digit Byte D5A5 JSR $D531 ; Print Space D5A8 LDA $0207 D5AB JSR $D722 ; Output 2-digit Byte D5AE LDA $0208 D5B1 JSR $D722 ; Output 2-digit Byte D5B4 JSR $D523 ; ? D5B7 JSR $D4F7 ; Display Memory D5BA BEQ $D5F5 ; Perform [m] D5BC JSR $D798 ; ? D5BF JSR $D754 ; ? D5C2 BCC $D5F8 D5C4 JSR $D744 ; Swap Add_ with Add_ D5C7 JSR $D798 ; ? D5CA JSR $D754 ; ? D5CD BCC $D5F8 D5CF JSR $D744 ; Swap Add_ with Add_ D5D2 iD5D2 JSR $F335 ; - -stop- D5D5 BEQ $D5F5 D5D7 LDX $DE ; Cassette Read / Write Block Count D5D9 BNE $D5F5 D5DB SEC D5DC LDA $FD ; Tape Load Temps D5DE SBC $FB ; I/O Start Address D5E0 LDA $FE D5E2 SBC $FC D5E4 BCC $D5F5 D5E6 LDY #$3A D5E8 JSR $D579 ; Do New Line D5EB JSR $D717 ; Output 4-digit Address D5EE LDA #$08 D5F0 JSR $D4F7 ; Display Memory D5F3 BEQ $D5D2 D5F5 iD5F5 JMP $D4BA ; *Get Command D5F8 iD5F8 JMP $D7A4 ; Print '?' ; Perform [;] D5FB JSR $D763 ; Input Hex Byte D5FE JSR $D754 ; ? D601 BCC $D606 D603 JSR $D4EC D606 iD606 JSR $F215 ; chrin Input a byte D609 JSR $D754 ; ? D60C BCC $D618 D60E LDA $FB ; I/O Start Address D610 STA $0208 D613 LDA $FC D615 STA $0207 D618 iD618 JSR $D523 ; ? D61B BNE $D627 ; Perform [:] D61D JSR $D763 ; Input Hex Byte D620 JSR $D754 ; ? D623 BCC $D5F8 D625 LDA #$08 D627 iD627 STA $B5 D629 iD629 JSR $D798 ; ? D62C JSR $D50B ; ? D62F BNE $D629 D631 BEQ $D5F5 ; Perform [g] D633 JSR $F215 ; chrin Input a byte D636 CMP #$0D D638 BEQ $D646 D63A CMP #$20 D63C BNE $D5F8 D63E JSR $D754 ; ? D641 BCC $D646 D643 JSR $D4EC D646 iD646 LDX $0206 D649 TXS D64A SEI D64B LDA $0207 D64E STA $91 D650 LDA $0208 D653 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455] D655 LDA $0200 ; System INPUT Buffer D658 PHA D659 LDA $0201 D65C PHA D65D LDA $0202 D660 PHA D661 LDA $0203 D664 LDX $0204 D667 LDY $0205 D66A RTI ; Perform [x] D66B LDX $0206 D66E TXS D66F JMP $B3FF ; ready Restart BASIC D672 iD672 JMP $D7A4 ; Print '?' ; Perform [l/s] D675 LDY #$01 D677 STY $D4 ; Current Device Number D679 DEY D67A STY $D1 ; Length of Current File Name D67C STY $96 ; Kernal I/O Status Word: ST D67E STY $9D ; Flag: 0 = Load, 1 = Verify (Kernel) D680 LDA #$02 D682 STA $DB D684 LDA #$09 D686 STA $DA ; Pointer: Current File Name D688 iD688 JSR $F215 ; chrin Input a byte D68B CMP #$20 D68D BEQ $D688 D68F CMP #$0D D691 BEQ $D6AD D693 CMP #$22 D695 iD695 BNE $D672 D697 iD697 JSR $F215 ; chrin Input a byte D69A CMP #$22 D69C BEQ $D6C2 D69E CMP #$0D D6A0 BEQ $D6AD D6A2 STA ($DA),Y ; Pointer: Current File Name D6A4 INC $D1 ; Length of Current File Name D6A6 INY D6A7 CPY #$10 D6A9 iD6A9 BEQ $D672 D6AB BNE $D697 D6AD iD6AD LDA $B4 D6AF CMP #$06 D6B1 iD6B1 BNE $D695 D6B3 JSR $F356 D6B6 JSR $F92B ; ? D6B9 LDA $96 ; Kernal I/O Status Word: ST D6BB AND #$10 D6BD iD6BD BNE $D6B1 D6BF JMP $D4BA ; *Get Command D6C2 iD6C2 JSR $F215 ; chrin Input a byte D6C5 CMP #$0D D6C7 BEQ $D6AD D6C9 CMP #$2C D6CB iD6CB BNE $D6BD D6CD JSR $D763 ; Input Hex Byte D6D0 AND #$0F D6D2 iD6D2 BEQ $D6A9 D6D4 CMP #$03 D6D6 BEQ $D6D2 D6D8 STA $D4 ; Current Device Number D6DA JSR $F215 ; chrin Input a byte D6DD CMP #$0D D6DF BEQ $D6AD D6E1 CMP #$2C D6E3 iD6E3 BNE $D6CB D6E5 JSR $D754 ; ? D6E8 JSR $D744 ; Swap Add_ with Add_ D6EB JSR $F215 ; chrin Input a byte D6EE CMP #$2C D6F0 iD6F0 BNE $D6E3 D6F2 JSR $D754 ; ? D6F5 LDA $FB ; I/O Start Address D6F7 STA $C9 ; Tape End Addresses/End of Program D6F9 LDA $FC D6FB STA $CA D6FD JSR $D744 ; Swap Add_ with Add_ D700 iD700 JSR $F215 ; chrin Input a byte D703 CMP #$20 D705 BEQ $D700 D707 CMP #$0D D709 iD709 BNE $D6F0 D70B LDA $B4 D70D CMP #$07 D70F BNE $D709 D711 JSR $F6E3 D714 JMP $D4BA ; *Get Command ; Output 4-digit Address D717 iD717 LDX #$01 D719 LDA $FA,X ; Tape Motor Interlock #2 D71B PHA D71C LDA $FB,X ; I/O Start Address D71E JSR $D722 ; Output 2-digit Byte D721 PLA ; Output 2-digit Byte D722 iD722 PHA D723 LSR D724 LSR D725 LSR D726 LSR D727 JSR $D73A ; Byte to 2 Ascii D72A TAX D72B PLA D72C AND #$0F D72E JSR $D73A ; Byte to 2 Ascii ; Output 2 Ascii Chars D731 iD731 PHA D732 TXA D733 JSR $F266 ; chrout Output One Character D736 PLA D737 JMP $F266 ; chrout Output One Character ; Byte to 2 Ascii D73A iD73A CLC D73B ADC #$F6 D73D BCC $D741 D73F ADC #$06 D741 iD741 ADC #$3A D743 RTS ; Swap Add_ with Add_ D744 iD744 LDX #$02 D746 iD746 LDA $FA,X ; Tape Motor Interlock #2 D748 PHA D749 LDA $FC,X D74B STA $FA,X ; Tape Motor Interlock #2 D74D PLA D74E STA $FC,X D750 DEX D751 BNE $D746 D753 RTS ; ? D754 iD754 JSR $D763 ; Input Hex Byte D757 BCC $D75B D759 STA $FC D75B iD75B JSR $D763 ; Input Hex Byte D75E BCC $D762 D760 STA $FB ; I/O Start Address D762 iD762 RTS ; Input Hex Byte D763 iD763 LDA #$00 D765 STA $0100 ; Micro-Processor System Stack Area D768 JSR $D798 ; ? D76B CMP #$20 D76D BNE $D778 D76F JSR $D798 ; ? D772 CMP #$20 D774 BNE $D785 D776 CLC D777 RTS D778 iD778 JSR $D78D ; Evaluate Hex Digit D77B ASL D77C ASL D77D ASL D77E ASL D77F STA $0100 ; Micro-Processor System Stack Area D782 JSR $D798 ; ? D785 iD785 JSR $D78D ; Evaluate Hex Digit D788 ORA $0100 ; Micro-Processor System Stack Area D78B SEC D78C RTS ; Evaluate Hex Digit D78D iD78D CMP #$3A D78F PHP D790 AND #$0F D792 PLP D793 BCC $D797 D795 ADC #$08 D797 iD797 RTS ; ? D798 iD798 JSR $F215 ; chrin Input a byte D79B CMP #$0D D79D BNE $D797 D79F PLA D7A0 PLA D7A1 JMP $D4BA ; *Get Command ; Print '?' ; ; DOS ; D7A4 iD7A4 LDA #$3F D7A6 JSR $F266 ; chrout Output One Character D7A9 JMP $D4BA ; *Get Command D7AC iD7AC JMP $BF00 ; synerr Output ?SYNTAX Error ; Perform [record] D7AF iD7AF LDA #$01 D7B1 STA $033A ; Tape I/O Buffer #2 D7B4 JSR $0076 ; Entry to Get Same Byte of Text Again D7B7 LDA #$23 D7B9 JSR $BEF7 ; -Confirm Character in A D7BC JSR $DE8A D7BF CPX #$00 D7C1 BEQ $D801 D7C3 STX $D2 ; Current Logical File Number D7C5 JSR $BEF5 ; -Test comma- D7C8 BEQ $D7AC D7CA BCC $D7DB D7CC JSR $BEF2 ; -Test '('- D7CF JSR $BD98 ; frmevl Evaluate Expression in Text D7D2 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM D7D5 JSR $BEEF ; chkcls Confirm Character D7D8 JMP $D7E1 D7DB iD7DB JSR $BD98 ; frmevl Evaluate Expression in Text D7DE JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM D7E1 iD7E1 JSR $0076 ; Entry to Get Same Byte of Text Again D7E4 BEQ $D7FE D7E6 JSR $BEF5 ; -Test comma- D7E9 BEQ $D7AC D7EB JSR $DE8A D7EE CPX #$00 D7F0 BEQ $D801 D7F2 CPX #$FF D7F4 BEQ $D801 D7F6 STX $033A ; Tape I/O Buffer #2 D7F9 JSR $0076 ; Entry to Get Same Byte of Text Again D7FC BNE $D7AC D7FE iD7FE JMP $DA31 D801 iD801 JMP $DE27 ; ? D804 iD804 AND #$E6 D806 BEQ $D80B D808 iD808 JMP $BF00 ; synerr Output ?SYNTAX Error D80B iD80B LDA $033E ; 4: DOS 8-bit syntax checking flag D80E AND #$01 D810 CMP #$01 D812 BNE $D808 D814 LDA $033E ; 4: DOS 8-bit syntax checking flag D817 RTS D818 iD818 AND #$E7 D81A BNE $D808 D81C RTS D81D iD81D AND #$C4 D81F BNE $D808 D821 LDA $033E ; 4: DOS 8-bit syntax checking flag D824 iD824 AND #$03 D826 CMP #$03 D828 BNE $D808 D82A LDA $033E ; 4: DOS 8-bit syntax checking flag D82D RTS ; ? D82E iD82E AND #$05 D830 CMP #$05 D832 BNE $D808 D834 LDA $033E ; 4: DOS 8-bit syntax checking flag D837 RTS ; DATA D838 sD838 .byte FF 24 D1 D1 3A F1 2C E1 ;.$QQ:.,. D840 .byte 2C E0 D1 3A F1 2C 41 4E ;,.Q:.,an D848 .byte D1 3A F1 2C D0 56 D1 44 ;Q:.,PvQd D850 .byte D2 3D D1 43 D2 3A F2 3D ;R=QcR:.= D858 .byte D1 3A F1 43 D2 3A F2 3D ;Q:.cR:.= D860 .byte D2 3A F2 2C D1 3A F1 52 ;R:.,Q:.r D868 .byte D1 3A F2 3D D1 3A F1 53 ;Q:.=Q:.s D870 .byte D1 3A F1 ;Q:. ; Perform [catalog/directory] D873 iD873 LDA $D2 ; Current Logical File Number D875 STA $B3 ; Temporary save eg. logical address or DOS wedge D877 JSR $DC68 ; ? D87A JSR $D818 D87D LDY #$00 D87F LDX #$01 D881 LDA $033E ; 4: DOS 8-bit syntax checking flag D884 AND #$10 D886 BEQ $D889 D888 INX D889 iD889 TXA D88A JSR $DBFA ; ? D88D LDA $B0 ; Default Output (CMD) Device (3) D88F STA $BA D891 LDA #$60 D893 STA $D3 ; Current Secondary Address D895 LDA #$0E D897 STA $D2 ; Current Logical File Number D899 JSR $F1B9 ; untlk Send UNLISTEN D89C JSR $F565 D89F LDA #$00 D8A1 STA $96 ; Kernal I/O Status Word: ST D8A3 LDY #$03 D8A5 iD8A5 STY $D1 ; Length of Current File Name D8A7 LDX #$0E D8A9 JSR $F7AF ; chkin Set Input Device D8AC JSR $F215 ; chrin Input a byte D8AF STA $FD ; Tape Load Temps D8B1 LDY $96 ; Kernal I/O Status Word: ST D8B3 BNE $D912 D8B5 JSR $F215 ; chrin Input a byte D8B8 STA $FE D8BA LDY $96 ; Kernal I/O Status Word: ST D8BC BNE $D912 D8BE LDY $D1 ; Length of Current File Name D8C0 DEY D8C1 BNE $D8A5 D8C3 JSR $F2A6 ; clrchn Restore Default I/O D8C6 JSR $D923 D8C9 LDX $FD ; Tape Load Temps D8CB LDA $FE D8CD JSR $CF83 D8D0 LDA #$20 D8D2 JSR $F266 ; chrout Output One Character D8D5 JSR $F2A6 ; clrchn Restore Default I/O D8D8 iD8D8 LDX #$0E D8DA JSR $F7AF ; chkin Set Input Device D8DD JSR $F215 ; chrin Input a byte D8E0 PHA D8E1 JSR $F2A6 ; clrchn Restore Default I/O D8E4 PLA D8E5 LDX $96 ; Kernal I/O Status Word: ST D8E7 BNE $D912 D8E9 CMP #$00 D8EB BEQ $D905 D8ED JSR $D91A D8F0 JSR $F335 ; - -stop- D8F3 BEQ $D912 D8F5 JSR $F205 ; - Input From Screen or Keyboard D8F8 BEQ $D8D8 D8FA CMP #$20 D8FC BNE $D8D8 D8FE iD8FE JSR $F205 ; - Input From Screen or Keyboard D901 BEQ $D8FE D903 BNE $D8D8 D905 iD905 LDA #$0D D907 JSR $D91A D90A JSR $F1B9 ; untlk Send UNLISTEN D90D LDY #$02 D90F BNE $D8A5 D911 PLA D912 iD912 JSR $F2A6 ; clrchn Restore Default I/O D915 LDA #$0E D917 JMP $F2E2 D91A iD91A JSR $D923 D91D JSR $F266 ; chrout Output One Character D920 JMP $F2A6 ; clrchn Restore Default I/O D923 iD923 LDX $BA D925 CPX #$03 D927 BEQ $D92E D929 LDX $B3 ; Temporary save eg. logical address or DOS wedge D92B JSR $F7FE ; chkout Set Output Device D92E iD92E RTS D92F iD92F LDY #$61 D931 iD931 INY D932 TYA D933 LDX $AE ; No. of Open Files / Index to File Table D935 iD935 DEX D936 BMI $D93F D938 CMP $0265,X ; KERNAL Table: Second Address Each File D93B BEQ $D931 D93D BNE $D935 D93F iD93F STY $D3 ; Current Secondary Address D941 RTS ; Perform [dopen] D942 iD942 JSR $DC68 ; ? D945 JSR $D82E ; ? D948 AND #$22 D94A BEQ $D94F D94C JMP $BF00 ; synerr Output ?SYNTAX Error D94F iD94F JSR $D92F D952 LDY #$02 D954 LDX #$03 D956 BIT $033E D959 BVC $D95D D95B LDX #$07 D95D iD95D BIT $033E D960 BPL $D970 D962 LDA #$40 D964 STA $0353 ; 4: Full DOS command string buffer D967 TXA D968 LDX #$01 D96A JSR $DBFC D96D JMP $F563 D970 iD970 TXA D971 JSR $DBFA ; ? D974 JMP $F563 ; Perform [append] D977 iD977 JSR $DC68 ; ? D97A JSR $D82E ; ? D97D AND #$E2 D97F BEQ $D984 D981 JMP $BF00 ; synerr Output ?SYNTAX Error D984 iD984 JSR $D92F D987 LDY #$09 D989 LDA #$05 D98B JSR $DBFA ; ? D98E JMP $F563 D991 iD991 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve D993 BNE $D9AB ; ? D995 iD995 LDA #$28 D997 STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve D999 JSR $C61D ; getspa Allocate Space for String D99C STX $0E ; 3: File# of current I/O device (as 0010) D99E STY $0F ; 3: terminal width (unused-carried over from TTY) D9A0 LDA #$00 D9A2 LDY #$29 D9A4 JSR $DE9E D9A7 LDA #$0D D9A9 STA ($0E),Y ; 3: File# of current I/O device (as 0010) D9AB iD9AB LDA $D4 ; Current Device Number D9AD BNE $D9B3 D9AF LDA #$08 D9B1 STA $D4 ; Current Device Number D9B3 iD9B3 JSR $F0D2 ; talk Send TALK Command on IEEE Bus D9B6 LDA #$6F D9B8 STA $D3 ; Current Secondary Address D9BA JSR $F193 D9BD LDY #$FF D9BF iD9BF INY D9C0 JSR $F1C0 D9C3 CMP #$0D D9C5 BEQ $D9CB D9C7 STA ($0E),Y ; 3: File# of current I/O device (as 0010) D9C9 BNE $D9BF D9CB iD9CB LDA #$00 D9CD STA ($0E),Y ; 3: File# of current I/O device (as 0010) D9CF JMP $F1AE ; untlk Send UNTALK ; Perform [header] D9D2 iD9D2 JSR $DC68 ; ? D9D5 JSR $D804 ; ? D9D8 AND #$11 D9DA CMP #$11 D9DC BEQ $D9E1 D9DE JMP $BF00 ; synerr Output ?SYNTAX Error D9E1 iD9E1 JSR $DA1B D9E4 JSR $DB9E ; ? D9E7 BCC $D9EA D9E9 RTS D9EA iD9EA LDY #$0E D9EC LDA #$04 D9EE LDX $033F ; 4: DOS diskette ID D9F1 BEQ $D9F5 D9F3 LDA #$06 D9F5 iD9F5 JSR $DA98 D9F8 JSR $D991 D9FB LDY #$00 D9FD LDA ($0E),Y ; 3: File# of current I/O device (as 0010) D9FF CMP #$32 DA01 BCS $DA04 DA03 RTS DA04 iDA04 JMP $DBD7 ; Confirm Disk Valid ; Perform [dclose] DA07 iDA07 JSR $DC68 ; ? DA0A AND #$F3 DA0C BEQ $DA11 DA0E JMP $BF00 ; synerr Output ?SYNTAX Error DA11 iDA11 JSR $DBE1 ; ? DA14 LDA $D2 ; Current Logical File Number DA16 BEQ $DA1B DA18 JMP $F2E2 DA1B iDA1B LDA $D4 ; Current Device Number DA1D LDX $AE ; No. of Open Files / Index to File Table DA1F iDA1F DEX DA20 BMI $DA30 DA22 CMP $025B,X ; KERNAL Table: Device No. for Each File DA25 BNE $DA1F DA27 LDA $0251,X ; KERNAL Table: Active Logical File No's. DA2A JSR $F2E7 DA2D CLV DA2E BVC $DA1B DA30 iDA30 RTS DA31 iDA31 LDA $D2 ; Current Logical File Number DA33 JSR $F2C1 DA36 BEQ $DA3D DA38 LDY #$17 DA3A JMP $F5AF DA3D iDA3D JSR $F2CD DA40 JSR $DBE1 ; ? DA43 LDA #$50 DA45 STA $0353 ; 4: Full DOS command string buffer DA48 LDA $D3 ; Current Secondary Address DA4A STA $0354 DA4D LDA $11 ; Temp: Integer Value DA4F STA $0355 DA52 LDA $12 DA54 STA $0356 DA57 LDA $033A ; Tape I/O Buffer #2 DA5A STA $0357 DA5D LDX #$05 DA5F JSR $DC4C DA62 JMP $DA9B ; Perform [collect] DA65 iDA65 JSR $DC68 ; ? DA68 JSR $D818 DA6B JSR $DA1B DA6E LDY #$14 DA70 LDX #$01 DA72 LDA $033E ; 4: DOS 8-bit syntax checking flag DA75 AND #$10 DA77 BEQ $DA7A DA79 INX DA7A iDA7A TXA DA7B JMP $DA98 ; Perform [backup] DA7E iDA7E JSR $DC68 ; ? DA81 AND #$30 DA83 CMP #$30 DA85 BEQ $DA8A DA87 iDA87 JMP $BF00 ; synerr Output ?SYNTAX Error DA8A iDA8A LDA $033E ; 4: DOS 8-bit syntax checking flag DA8D AND #$C7 DA8F BNE $DA87 DA91 JSR $DA1B DA94 LDY #$16 DA96 LDA #$04 DA98 iDA98 JSR $DBFA ; ? DA9B iDA9B LDA #$6F DA9D STA $D3 ; Current Secondary Address DA9F JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus DAA2 LDA $D3 ; Current Secondary Address DAA4 JMP $F4B4 ; Perform [copy] DAA7 iDAA7 JSR $DC68 ; ? DAAA AND #$30 DAAC CMP #$30 DAAE BNE $DAB7 DAB0 LDA $033E ; 4: DOS 8-bit syntax checking flag DAB3 AND #$C7 DAB5 BEQ $DAC0 DAB7 iDAB7 LDA $033E ; 4: DOS 8-bit syntax checking flag DABA JSR $D81D DABD LDA $033E ; 4: DOS 8-bit syntax checking flag DAC0 iDAC0 LDY #$1A DAC2 LDA #$08 DAC4 JMP $DA98 ; Perform [concat] DAC7 iDAC7 JSR $DC68 ; ? DACA JSR $D81D DACD LDY #$22 DACF LDA #$0C DAD1 JMP $DA98 DAD4 iDAD4 LDA $D1 ; Length of Current File Name DAD6 STA $033A ; Tape I/O Buffer #2 DAD9 LDA $DA ; Pointer: Current File Name DADB STA $FD ; Tape Load Temps DADD LDA $DB DADF STA $FE DAE1 iDAE1 TYA DAE2 PHA DAE3 LDY $033A ; Tape I/O Buffer #2 DAE6 BEQ $DAF8 DAE8 LDY #$00 DAEA iDAEA LDA ($FD),Y ; Tape Load Temps DAEC STA $0353,X ; 4: Full DOS command string buffer DAEF INX DAF0 INY DAF1 CPY $033A ; Tape I/O Buffer #2 DAF4 BNE $DAEA DAF6 BEQ $DAF9 DAF8 iDAF8 DEX DAF9 iDAF9 PLA DAFA TAY DAFB SEC DAFC RTS DAFD iDAFD LDA $033F ; 4: DOS diskette ID DB00 STA $0353,X ; 4: Full DOS command string buffer DB03 INX DB04 LDA $0340 DB07 STA $0353,X ; 4: Full DOS command string buffer DB0A INX DB0B TXA DB0C RTS ; Perform [dsave] DB0D iDB0D JSR $DC68 ; ? DB10 JSR $D80B DB13 AND #$66 DB15 BEQ $DB1A DB17 JMP $BF00 ; synerr Output ?SYNTAX Error DB1A iDB1A LDY #$02 DB1C LDA $033E ; 4: DOS 8-bit syntax checking flag DB1F AND #$80 DB21 BEQ $DB32 DB23 LDA #$40 DB25 STA $0353 ; 4: Full DOS command string buffer DB28 LDX #$01 DB2A LDA #$03 DB2C JSR $DBFC DB2F JMP $F6E0 DB32 iDB32 LDA #$03 DB34 JSR $DBFA ; ? DB37 JMP $F6E0 ; Perform [dload] DB3A iDB3A JSR $DC68 ; ? DB3D JSR $D80B DB40 AND #$E6 DB42 BEQ $DB47 DB44 iDB44 JMP $BF00 ; synerr Output ?SYNTAX Error DB47 iDB47 LDY #$02 DB49 LDA #$03 DB4B JSR $DBFA ; ? DB4E LDA #$00 DB50 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) DB52 JMP $F408 ; Perform [rename] DB55 iDB55 JSR $DC68 ; ? DB58 JSR $D824 DB5B AND #$E4 DB5D BNE $DB44 DB5F LDY #$2E DB61 LDA #$08 DB63 JMP $DA98 ; Perform [scratch] DB66 iDB66 JSR $DC68 ; ? DB69 JSR $D804 ; ? DB6C JSR $DB9E ; ? DB6F BCS $DB98 DB71 LDY #$36 DB73 LDA #$04 DB75 JSR $DA98 DB78 JSR $DB99 ; Check Disk Valid DB7B BNE $DB98 DB7D JSR $D991 DB80 LDA #$0D DB82 JSR $E202 ; - Output to Screen DB85 LDY #$00 DB87 iDB87 LDA ($0E),Y ; 3: File# of current I/O device (as 0010) DB89 CMP #$00 DB8B BEQ $DB93 DB8D JSR $E202 ; - Output to Screen DB90 INY DB91 BNE $DB87 DB93 iDB93 LDA #$0D DB95 JSR $E202 ; - Output to Screen DB98 iDB98 RTS ; Check Disk Valid DB99 iDB99 LDA $78 DB9B CMP #$02 DB9D RTS ; ? DB9E iDB9E JSR $DB99 ; Check Disk Valid DBA1 BNE $DBD5 DBA3 LDY #$B6 DBA5 JSR $F185 ; - Print Message DBA8 JSR $F2A6 ; clrchn Restore Default I/O DBAB JSR $F215 ; chrin Input a byte DBAE CMP #$59 DBB0 BNE $DBCB DBB2 JSR $F215 ; chrin Input a byte DBB5 CMP #$0D DBB7 BEQ $DBD5 DBB9 CMP #$45 DBBB BNE $DBCB DBBD JSR $F215 ; chrin Input a byte DBC0 CMP #$53 DBC2 BNE $DBCB DBC4 JSR $F215 ; chrin Input a byte DBC7 CMP #$0D DBC9 BEQ $DBD5 DBCB iDBCB CMP #$0D DBCD SEC DBCE BEQ $DBD6 DBD0 JSR $F215 ; chrin Input a byte DBD3 BNE $DBCB DBD5 iDBD5 CLC DBD6 iDBD6 RTS ; Confirm Disk Valid DBD7 iDBD7 JSR $DB99 ; Check Disk Valid DBDA BNE $DBD6 DBDC LDY #$C5 DBDE JMP $F185 ; - Print Message ; ? DBE1 iDBE1 TYA DBE2 PHA DBE3 LDA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve DBE5 BEQ $DBF1 DBE7 LDY #$28 DBE9 TYA DBEA STA ($0E),Y ; 3: File# of current I/O device (as 0010) DBEC INY DBED LDA #$FF DBEF STA ($0E),Y ; 3: File# of current I/O device (as 0010) DBF1 iDBF1 LDA #$00 DBF3 STA $96 ; Kernal I/O Status Word: ST DBF5 STA $0D ; 3: Flag to suppress PRINT or PRINT# when -ve DBF7 PLA DBF8 TAY DBF9 RTS ; ? DBFA iDBFA LDX #$00 DBFC iDBFC STA $0341 ; 4: Length of DOS command string DBFF JSR $DBE1 ; ? DC02 iDC02 DEC $0341 ; 4: Length of DOS command string DC05 BMI $DC4C DC07 INY DC08 LDA $D838,Y ; DATA DC0B BPL $DC46 DC0D CMP #$F1 DC0F BNE $DC14 DC11 JSR $DAD4 DC14 iDC14 CMP #$F2 DC16 BNE $DC1B DC18 JSR $DAE1 DC1B iDC1B CMP #$E0 DC1D BNE $DC24 DC1F LDA $033D ; 4: DOS length / write flag DC22 BNE $DC46 DC24 iDC24 CMP #$D0 DC26 BNE $DC2B DC28 JSR $DAFD DC2B iDC2B CMP #$E1 DC2D BNE $DC34 DC2F JSR $DC57 DC32 BNE $DC46 DC34 iDC34 CMP #$D1 DC36 BNE $DC3D DC38 LDA $033B ; 4: DOS drive 1 number DC3B BPL $DC44 DC3D iDC3D CMP #$D2 DC3F BNE $DC02 DC41 LDA $033C ; 4: DOS drive 2 number DC44 iDC44 ORA #$30 DC46 iDC46 STA $0353,X ; 4: Full DOS command string buffer DC49 INX DC4A BNE $DC02 DC4C iDC4C STX $D1 ; Length of Current File Name DC4E LDA #$53 DC50 STA $DA ; Pointer: Current File Name DC52 LDA #$03 DC54 STA $DB DC56 RTS DC57 iDC57 LDA $033D ; 4: DOS length / write flag DC5A BEQ $DC60 DC5C LDA #$4C DC5E BNE $DC67 DC60 iDC60 LDA #$53 DC62 STA $033D ; 4: DOS length / write flag DC65 LDA #$57 DC67 iDC67 RTS ; ? DC68 iDC68 LDX #$00 DC6A STX $033E ; 4: DOS 8-bit syntax checking flag DC6D STX $D2 ; Current Logical File Number DC6F STX $033D ; 4: DOS length / write flag DC72 STX $033B ; 4: DOS drive 1 number DC75 STX $033C ; 4: DOS drive 2 number DC78 STX $D1 ; Length of Current File Name DC7A STX $033A ; Tape I/O Buffer #2 DC7D STX $033F ; 4: DOS diskette ID DC80 LDX #$08 DC82 STX $D4 ; Current Device Number DC84 JSR $0076 ; Entry to Get Same Byte of Text Again DC87 BEQ $DD03 DC89 iDC89 CMP #$23 DC8B BEQ $DCBD DC8D CMP #$57 DC8F BEQ $DCD8 DC91 CMP #$4C DC93 BEQ $DCD8 DC95 CMP #$52 DC97 BNE $DC9F DC99 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DC9C JMP $DD96 DC9F iDC9F CMP #$44 DCA1 BEQ $DD15 DCA3 CMP #$91 DCA5 BEQ $DD09 DCA7 CMP #$55 DCA9 BEQ $DD0F DCAB CMP #$49 DCAD BNE $DCB2 DCAF JMP $DD37 DCB2 iDCB2 CMP #$22 DCB4 BEQ $DD06 DCB6 CMP #$28 DCB8 BEQ $DD06 DCBA iDCBA JMP $BF00 ; synerr Output ?SYNTAX Error DCBD iDCBD LDA $033E ; 4: DOS 8-bit syntax checking flag DCC0 AND #$04 DCC2 BNE $DCBA DCC4 JSR $DE87 ; ? DCC7 CPX #$00 DCC9 BEQ $DD34 DCCB STX $D2 ; Current Logical File Number DCCD LDA $033E ; 4: DOS 8-bit syntax checking flag DCD0 ORA #$04 DCD2 STA $033E ; 4: DOS 8-bit syntax checking flag DCD5 JMP $DD96 DCD8 iDCD8 TAX DCD9 LDA $033E ; 4: DOS 8-bit syntax checking flag DCDC AND #$40 DCDE BNE $DCBA DCE0 CPX #$57 DCE2 BNE $DCEA DCE4 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DCE7 JMP $DCF8 DCEA iDCEA JSR $DE87 ; ? DCED CPX #$00 DCEF BEQ $DD34 DCF1 CPX #$FF DCF3 BEQ $DD34 DCF5 STX $033D ; 4: DOS length / write flag DCF8 iDCF8 LDA $033E ; 4: DOS 8-bit syntax checking flag DCFB ORA #$40 DCFD STA $033E ; 4: DOS 8-bit syntax checking flag DD00 JMP $DD96 DD03 iDD03 JMP $DE23 DD06 iDD06 JMP $DD60 DD09 iDD09 JSR $DE2C DD0C JMP $DD96 DD0F iDD0F JSR $DE33 DD12 JMP $DD96 DD15 iDD15 LDA $033E ; 4: DOS 8-bit syntax checking flag DD18 AND #$10 DD1A BNE $DCBA DD1C JSR $DE87 ; ? DD1F CPX #$02 DD21 BCS $DD34 DD23 STX $033B ; 4: DOS drive 1 number DD26 STX $033C ; 4: DOS drive 2 number DD29 LDA $033E ; 4: DOS 8-bit syntax checking flag DD2C ORA #$10 DD2E STA $033E ; 4: DOS 8-bit syntax checking flag DD31 JMP $DD96 DD34 iDD34 JMP $DE27 DD37 iDD37 LDA $033D ; 4: DOS length / write flag DD3A AND #$FF DD3C BEQ $DD41 DD3E JMP $BF00 ; synerr Output ?SYNTAX Error DD41 iDD41 LDY #$00 DD43 LDX #$00 DD45 iDD45 INC $77 ; Pointer: Current Byte of BASIC Text DD47 BNE $DD4B DD49 INC $78 DD4B iDD4B LDA ($77),Y ; Pointer: Current Byte of BASIC Text DD4D STA $033F,X ; 4: DOS diskette ID DD50 INX DD51 CPX #$02 DD53 BCC $DD45 DD55 LDA #$FF DD57 STA $033D ; 4: DOS length / write flag DD5A JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DD5D JMP $DD96 DD60 iDD60 LDA $033E ; 4: DOS 8-bit syntax checking flag DD63 AND #$01 DD65 JSR $DE49 DD68 STA $D1 ; Length of Current File Name DD6A STA $0341 ; 4: Length of DOS command string DD6D LDA #$42 DD6F STA $DA ; Pointer: Current File Name DD71 LDA #$03 DD73 STA $DB DD75 LDY #$00 DD77 iDD77 LDA ($1F),Y ; Utility Pointer Area DD79 CPY #$00 DD7B BNE $DD85 DD7D CMP #$40 DD7F BNE $DD85 DD81 INC $DA ; Pointer: Current File Name DD83 DEC $D1 ; Length of Current File Name DD85 iDD85 STA $0342,Y ; 4: Buffer for filename DD88 INY DD89 CPY $0341 ; 4: Length of DOS command string DD8C BCC $DD77 DD8E LDA $033E ; 4: DOS 8-bit syntax checking flag DD91 ORA #$01 DD93 STA $033E ; 4: DOS 8-bit syntax checking flag DD96 iDD96 JSR $0076 ; Entry to Get Same Byte of Text Again DD99 BNE $DD9E DD9B JMP $DD03 DD9E iDD9E CMP #$2C DDA0 BNE $DDA8 DDA2 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DDA5 JMP $DC89 DDA8 iDDA8 CMP #$91 DDAA BNE $DDAF DDAC JMP $DD09 DDAF iDDAF CMP #$A4 DDB1 BEQ $DDB6 DDB3 JMP $BF00 ; synerr Output ?SYNTAX Error DDB6 iDDB6 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DDB9 CMP #$44 DDBB BEQ $DDD0 DDBD CMP #$91 DDBF BEQ $DDEC DDC1 CMP #$55 DDC3 BEQ $DDF2 DDC5 CMP #$22 DDC7 BEQ $DDF8 DDC9 CMP #$28 DDCB BEQ $DDF8 DDCD iDDCD JMP $BF00 ; synerr Output ?SYNTAX Error DDD0 iDDD0 LDA $033E ; 4: DOS 8-bit syntax checking flag DDD3 AND #$20 DDD5 BNE $DDCD DDD7 JSR $DE87 ; ? DDDA CPX #$02 DDDC BCS $DE27 DDDE STX $033C ; 4: DOS drive 2 number DDE1 LDA $033E ; 4: DOS 8-bit syntax checking flag DDE4 ORA #$20 DDE6 STA $033E ; 4: DOS 8-bit syntax checking flag DDE9 JMP $DE0F DDEC iDDEC JSR $DE2C DDEF JMP $DE0F DDF2 iDDF2 JSR $DE33 DDF5 JMP $DE0F DDF8 iDDF8 LDA $033E ; 4: DOS 8-bit syntax checking flag DDFB AND #$02 DDFD JSR $DE49 DE00 STA $033A ; Tape I/O Buffer #2 DE03 STX $FD ; Tape Load Temps DE05 STY $FE DE07 LDA $033E ; 4: DOS 8-bit syntax checking flag DE0A ORA #$02 DE0C STA $033E ; 4: DOS 8-bit syntax checking flag DE0F iDE0F JSR $0076 ; Entry to Get Same Byte of Text Again DE12 BEQ $DE23 DE14 CMP #$2C DE16 BEQ $DDB6 DE18 CMP #$91 DE1A BEQ $DDEC DE1C CMP #$55 DE1E BEQ $DDF2 DE20 iDE20 JMP $BF00 ; synerr Output ?SYNTAX Error DE23 iDE23 LDA $033E ; 4: DOS 8-bit syntax checking flag DE26 RTS DE27 iDE27 LDX #$35 DE29 JMP $B3CF ; error Error Routine DE2C iDE2C JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DE2F CMP #$55 DE31 BNE $DE20 DE33 iDE33 JSR $DE87 ; ? DE36 CPX #$20 DE38 BCS $DE27 DE3A CPX #$03 DE3C BCC $DE27 DE3E STX $D4 ; Current Device Number DE40 LDA $033E ; 4: DOS 8-bit syntax checking flag DE43 ORA #$08 DE45 STA $033E ; 4: DOS 8-bit syntax checking flag DE48 RTS DE49 iDE49 BNE $DE20 DE4B JSR $BD98 ; frmevl Evaluate Expression in Text DE4E JSR $C7B5 ; frestr Perform String Housekeeping DE51 TAX DE52 CMP #$00 DE54 BEQ $DE27 DE56 CMP #$12 DE58 BCS $DE74 DE5A LDY #$00 DE5C LDA ($1F),Y ; Utility Pointer Area DE5E CMP #$40 DE60 BNE $DE6C DE62 LDA $033E ; 4: DOS 8-bit syntax checking flag DE65 AND #$80 DE67 BEQ $DE79 DE69 JMP $BF00 ; synerr Output ?SYNTAX Error DE6C iDE6C TXA DE6D CMP #$11 DE6F BCS $DE74 DE71 JMP $DE82 DE74 iDE74 LDX #$B0 DE76 JMP $B3CF ; error Error Routine DE79 iDE79 LDA $033E ; 4: DOS 8-bit syntax checking flag DE7C ORA #$80 DE7E STA $033E ; 4: DOS 8-bit syntax checking flag DE81 TXA DE82 iDE82 LDX $1F ; Utility Pointer Area DE84 LDY $20 DE86 RTS ; ? DE87 iDE87 JSR $0070 ; Subroutine: Get Next Byte of BASIC Text DE8A iDE8A BNE $DE8F DE8C JMP $BF00 ; synerr Output ?SYNTAX Error DE8F iDE8F BCC $DE9A DE91 JSR $BEF2 ; -Test '('- DE94 JSR $C8D4 ; -Eval Byte Parameter DE97 JMP $BEEF ; chkcls Confirm Character DE9A iDE9A JMP $C8D4 ; -Eval Byte Parameter ; ? DATA DE9D .byte F4 ;. DE9E iDE9E STA $96 ; Kernal I/O Status Word: ST DEA0 STA ($0E),Y ; 3: File# of current I/O device (as 0010) DEA2 DEY DEA3 RTS ; Patched Power-Up Message DATA DEA4 .byte 2A 2A 2A 20 43 4F 4D 4D ;*** comm DEAC .byte 4F 44 4F 52 45 20 42 41 ;odore ba DEB4 .byte 53 49 43 20 34 2E 30 20 ;sic 4.0 DEBC .byte 2A 2A 2A 0D 0D 00 ;***... ; Unused EMPTY ; ; Editor (E000-E7FF) ; DEC2 .byte AA AA AA AA AA AA AA AA ;........ DECA .byte AA AA AA AA AA AA AA AA ;........ DED2 .byte AA AA AA AA AA AA AA AA ;........ DEDA .byte AA AA AA AA AA AA AA AA ;........ DEE2 .byte AA AA AA AA AA AA AA AA ;........ DEEA .byte AA AA AA AA AA AA AA AA ;........ DEF2 .byte AA AA AA AA AA AA AA AA ;........ DEFA .byte AA AA AA AA AA AA AA AA ;........ DF02 .byte AA AA AA AA AA AA AA AA ;........ DF0A .byte AA AA AA AA AA AA AA AA ;........ DF12 .byte AA AA AA AA AA AA AA AA ;........ DF1A .byte AA AA AA AA AA AA AA AA ;........ DF22 .byte AA AA AA AA AA AA AA AA ;........ DF2A .byte AA AA AA AA AA AA AA AA ;........ DF32 .byte AA AA AA AA AA AA AA AA ;........ DF3A .byte AA AA AA AA AA AA AA AA ;........ DF42 .byte AA AA AA AA AA AA AA AA ;........ DF4A .byte AA AA AA AA AA AA AA AA ;........ DF52 .byte AA AA AA AA AA AA AA AA ;........ DF5A .byte AA AA AA AA AA AA AA AA ;........ DF62 .byte AA AA AA AA AA AA AA AA ;........ DF6A .byte AA AA AA AA AA AA AA AA ;........ DF72 .byte AA AA AA AA AA AA AA AA ;........ DF7A .byte AA AA AA AA AA AA AA AA ;........ DF82 .byte AA AA AA AA AA AA AA AA ;........ DF8A .byte AA AA AA AA AA AA AA AA ;........ DF92 .byte AA AA AA AA AA AA AA AA ;........ DF9A .byte AA AA AA AA AA AA AA AA ;........ DFA2 .byte AA AA AA AA AA AA AA AA ;........ DFAA .byte AA AA AA AA AA AA AA AA ;........ DFB2 .byte AA AA AA AA AA AA AA AA ;........ DFBA .byte AA AA AA AA AA AA AA AA ;........ DFC2 .byte AA AA AA AA AA AA AA AA ;........ DFCA .byte AA AA AA AA AA AA AA AA ;........ DFD2 .byte AA AA AA AA AA AA AA AA ;........ DFDA .byte AA AA AA AA AA AA AA AA ;........ DFE2 .byte AA AA AA AA AA AA AA AA ;........ DFEA .byte AA AA AA AA AA AA AA AA ;........ DFF2 .byte AA AA AA AA AA AA AA AA ;........ DFFA .byte AA AA AA AA AA AA ;...... ; cint Initialize Editor & Screen E000 iE000 JMP $E04B ; ? E003 JMP $E0A7 ; lp2 Get Character From Keyboard Buffer E006 JMP $E116 ; Input From Screen or Keyboard E009 JMP $E202 ; - Output to Screen E00C JMP $E442 ; - Main IRQ Entry Point E00F JMP $E455 ; ? E012 JMP $E600 ; - Return From Interrupt E015 JMP $E051 ; - Clear Screen E018 JMP $E07A ; Initialize CRTC -- E01B JMP $E082 ; Initialize CRTC -- ; Initialize CRTC (with custom values) E01E JMP $E088 E021 JMP $E3C8 ; ? E024 JMP $E3E8 ; - Scroll Screen E027 JMP $E4BE ; scnkey Scan Keyboard E02A JMP $E6A7 ; ? E02D JMP $E036 ; Set REPEAT Flag E030 JMP $E1E1 ; Set Window Top E033 JMP $E1DC ; Set Window Bottom ; Set REPEAT Flag E036 iE036 STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E038 RTS E039 TAX E03A TAX E03B TAX E03C TAX E03D TAX E03E TAX E03F TAX E040 TAX E041 TAX E042 TAX E043 TAX E044 TAX E045 TAX E046 TAX E047 TAX E048 TAX E049 TAX E04A TAX ; ? E04B iE04B JSR $E60F ; cint1 Initialize I/O E04E JSR $E07A ; Initialize CRTC -- ; - Clear Screen E051 iE051 LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E053 DEX E054 iE054 INX E055 JSR $E06C E058 JSR $E1C1 ; - Clear Screen Line E05B CPX $E1 ; 4.80: last line of window E05D BCC $E054 E05F iE05F LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E061 STX $D8 ; Current Cursor Physical Line Number E063 iE063 LDY $E2 ; 4.80: first column of window E065 STY $C6 ; Cursor Column on Current Line ; - Set Screen Pointers E067 iE067 LDX $D8 ; Current Cursor Physical Line Number E069 JMP $E06F E06C iE06C LDY $E2 ; 4.80: first column of window E06E DEY E06F iE06F LDA $E755,X ; - Screen Line Addresses LO DATA E072 STA $C4 ; Pointer: Current Screen Line Address E074 LDA $E76E,X ; - Screen Line Addresses HI DATA E077 STA $C5 E079 RTS ; Initialize CRTC -- E07A iE07A LDA #$2A E07C LDX #$E7 E07E LDY #$0E E080 BNE $E088 ; Initialize CRTC -- E082 iE082 LDA #$3C E084 LDX #$E7 E086 LDY #$0C E088 iE088 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling E08A STX $C8 E08C LDA $E84C E08F AND #$F0 E091 STA $D1 ; Length of Current File Name E093 TYA E094 ORA $D1 ; Length of Current File Name E096 STA $E84C E099 LDY #$11 E09B iE09B LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling E09D STY $E880 ; 6545/6845 CRT CHIP E0A0 STA $E881 E0A3 DEY E0A4 BPL $E09B E0A6 RTS ; lp2 Get Character From Keyboard Buffer E0A7 iE0A7 LDY $026F E0AA LDX #$00 E0AC iE0AC LDA $0270,X ; Keyboard Buffer Queue (FIFO) E0AF STA $026F,X E0B2 INX E0B3 CPX $9E ; No. of Chars. in Keyboard Buffer (Queue) E0B5 BNE $E0AC E0B7 DEC $9E ; No. of Chars. in Keyboard Buffer (Queue) E0B9 TYA E0BA CLI E0BB RTS E0BC iE0BC JSR $E68C E0BF iE0BF LDA $9E ; No. of Chars. in Keyboard Buffer (Queue) E0C1 STA $A7 ; Cursor Blink enable: 0 = Flash Cursor E0C3 BEQ $E0BF E0C5 SEI E0C6 LDA $AA ; Flag: Last Cursor Blink On/Off E0C8 BEQ $E0D3 E0CA LDA $A9 ; Character Under Cursor E0CC LDY #$00 E0CE STY $AA ; Flag: Last Cursor Blink On/Off E0D0 JSR $E606 ; ? E0D3 iE0D3 JSR $E0A7 ; lp2 Get Character From Keyboard Buffer E0D6 CMP #$83 E0D8 BNE $E0EA E0DA SEI E0DB LDX #$09 E0DD STX $9E ; No. of Chars. in Keyboard Buffer (Queue) E0DF iE0DF LDA $E720,X E0E2 STA $026E,X E0E5 DEX E0E6 BNE $E0DF E0E8 BEQ $E0BF E0EA iE0EA CMP #$0D E0EC BNE $E0BC E0EE LDY $D5 ; Physical Screen Line Length E0F0 STY $AC ; Flag: INPUT or GET from Keyboard E0F2 iE0F2 LDA ($C4),Y ; Pointer: Current Screen Line Address E0F4 CMP #$20 E0F6 BNE $E0FB E0F8 DEY E0F9 BNE $E0F2 E0FB iE0FB INY E0FC STY $A1 ; Pointer: End of Logical Line for INPUT E0FE JSR $E1CB ; Goto Left Border E101 NOP E102 STY $CD ; Flag: Editor in Quote Mode, $00 = NO E104 LDA $A3 ; Cursor Y-X Pos. at Start of INPUT E106 BMI $E121 E108 CMP $D8 ; Current Cursor Physical Line Number E10A BNE $E121 E10C LDA $A4 E10E STA $C6 ; Cursor Column on Current Line E110 CMP $A1 ; Pointer: End of Logical Line for INPUT E112 BCC $E121 E114 BCS $E144 ; Input From Screen or Keyboard E116 iE116 TYA E117 PHA E118 TXA E119 PHA E11A JMP ($00E9) ; 4.80: input from screen vector (from E006) E11D LDA $AC ; Flag: INPUT or GET from Keyboard E11F BEQ $E0BF E121 iE121 LDY $C6 ; Cursor Column on Current Line E123 LDA ($C4),Y ; Pointer: Current Screen Line Address E125 STA $D9 ; Current Character to Print E127 AND #$3F E129 ASL $D9 ; Current Character to Print E12B BIT $D9 E12D BPL $E131 E12F ORA #$80 E131 iE131 BCC $E137 E133 LDX $CD ; Flag: Editor in Quote Mode, $00 = NO E135 BNE $E13B E137 iE137 BVS $E13B E139 ORA #$40 E13B iE13B INC $C6 ; Cursor Column on Current Line E13D JSR $E16A ; check For Quotes E140 CPY $A1 ; Pointer: End of Logical Line for INPUT E142 BNE $E15B E144 iE144 LDA #$00 E146 STA $AC ; Flag: INPUT or GET from Keyboard E148 LDA #$0D E14A LDX $AF ; Default Input Device (0) E14C CPX #$03 E14E BEQ $E156 E150 LDX $B0 ; Default Output (CMD) Device (3) E152 CPX #$03 E154 BEQ $E159 E156 iE156 JSR $E202 ; - Output to Screen E159 iE159 LDA #$0D E15B iE15B STA $D9 ; Current Character to Print E15D PLA E15E TAX E15F PLA E160 TAY E161 LDA $D9 ; Current Character to Print E163 CMP #$DE E165 BNE $E169 E167 LDA #$FF E169 iE169 RTS ; check For Quotes E16A iE16A CMP #$22 E16C BNE $E176 E16E LDA $CD ; Flag: Editor in Quote Mode, $00 = NO E170 EOR #$01 E172 STA $CD ; Flag: Editor in Quote Mode, $00 = NO E174 LDA #$22 E176 iE176 RTS ; Ascii to Screen Code E177 iE177 ORA #$40 E179 iE179 LDX $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used E17B BEQ $E17F E17D iE17D ORA #$80 E17F iE17F LDX $DC ; Flag: Insert Mode, >0 = # INSTs E181 BEQ $E185 E183 DEC $DC ; Flag: Insert Mode, >0 = # INSTs E185 iE185 JSR $E606 ; ? E188 INC $C6 ; Cursor Column on Current Line E18A LDY $D5 ; Physical Screen Line Length E18C CPY $C6 ; Cursor Column on Current Line E18E BCS $E199 E190 LDX $D8 ; Current Cursor Physical Line Number E192 iE192 JSR $E3A3 ; - Go to Next Line E195 LDY $E2 ; 4.80: first column of window E197 STY $C6 ; Cursor Column on Current Line E199 iE199 LDA #$00 E19B STA $E8 ; 4.80: Home Count E19D iE19D PLA E19E TAY E19F LDA $DC ; Flag: Insert Mode, >0 = # INSTs E1A1 BEQ $E1A5 E1A3 LSR $CD ; Flag: Editor in Quote Mode, $00 = NO E1A5 iE1A5 PLA E1A6 TAX E1A7 PLA E1A8 CLI E1A9 RTS E1AA iE1AA LDY $D5 ; Physical Screen Line Length E1AC LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E1AE CPX $D8 ; Current Cursor Physical Line Number E1B0 BCC $E1BA E1B2 LDY $E2 ; 4.80: first column of window E1B4 STY $C6 ; Cursor Column on Current Line E1B6 PLA E1B7 PLA E1B8 BNE $E199 E1BA iE1BA DEC $D8 ; Current Cursor Physical Line Number E1BC STY $C6 ; Cursor Column on Current Line E1BE JMP $E067 ; - Set Screen Pointers ; - Clear Screen Line E1C1 iE1C1 LDA #$20 E1C3 iE1C3 INY E1C4 STA ($C4),Y ; Pointer: Current Screen Line Address E1C6 CPY $D5 ; Physical Screen Line Length E1C8 BCC $E1C3 E1CA RTS ; Goto Left Border E1CB iE1CB LDY $E2 ; 4.80: first column of window E1CD STY $C6 ; Cursor Column on Current Line E1CF LDY #$00 E1D1 RTS ; Exit Window E1D2 iE1D2 LDA #$00 E1D4 TAX E1D5 JSR $E1E1 ; Set Window Top E1D8 LDA #$18 E1DA LDX #$4F ; Set Window Bottom E1DC iE1DC STA $E1 ; 4.80: last line of window E1DE STX $D5 ; Physical Screen Line Length E1E0 RTS ; Set Window Top E1E1 iE1E1 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E1E3 STX $E2 ; 4.80: first column of window E1E5 RTS ; Unused EMPTY E1E6 .byte AA AA AA AA AA AA AA AA ;........ E1EE .byte AA AA AA AA AA AA AA AA ;........ E1F6 .byte AA AA AA AA AA AA AA AA ;........ E1FE .byte AA AA AA AA ;.... ; - Output to Screen E202 iE202 PHA E203 STA $D9 ; Current Character to Print E205 TXA E206 PHA E207 TYA E208 PHA E209 JMP ($00EB) ; 4.80: print to screen vector (from E009) E20C LDA #$00 E20E STA $AC ; Flag: INPUT or GET from Keyboard E210 LDY $C6 ; Cursor Column on Current Line E212 LDA $D9 ; Current Character to Print E214 AND #$7F E216 CMP #$1B E218 BNE $E21D E21A JMP $E3BD E21D iE21D LDA $D9 ; Current Character to Print E21F BPL $E224 ; - -unshifted characters- E221 JMP $E2F4 ; - -shifted characters- ; - -unshifted characters- E224 iE224 CMP #$0D E226 BNE $E22B E228 JMP $E3B6 ; - Output E22B iE22B CMP #$20 E22D BCC $E237 E22F AND #$3F E231 JSR $E16A ; check For Quotes E234 JMP $E179 E237 iE237 LDX $DC ; Flag: Insert Mode, >0 = # INSTs E239 BEQ $E23E E23B JMP $E17D E23E iE23E CMP #$14 E240 BNE $E262 E242 LDY $E2 ; 4.80: first column of window E244 CPY $C6 ; Cursor Column on Current Line E246 BCC $E24D E248 JSR $E1AA E24B BNE $E25C E24D iE24D DEC $C6 ; Cursor Column on Current Line E24F LDY $C6 ; Cursor Column on Current Line E251 iE251 INY E252 LDA ($C4),Y ; Pointer: Current Screen Line Address E254 DEY E255 STA ($C4),Y ; Pointer: Current Screen Line Address E257 INY E258 CPY $D5 ; Physical Screen Line Length E25A BNE $E251 E25C iE25C LDA #$20 E25E STA ($C4),Y ; Pointer: Current Screen Line Address E260 BNE $E299 E262 iE262 LDX $CD ; Flag: Editor in Quote Mode, $00 = NO E264 BEQ $E269 E266 JMP $E17D E269 iE269 CMP #$12 E26B BNE $E26F E26D STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used E26F iE26F CMP #$13 E271 BNE $E283 E273 LDA $E8 ; 4.80: Home Count E275 BPL $E27B E277 JSR $E1D2 ; Exit Window E27A CLC E27B iE27B ROR $E8 ; 4.80: Home Count E27D JSR $E05F E280 JMP $E19D E283 iE283 CMP #$1D E285 BNE $E292 E287 INY E288 STY $C6 ; Cursor Column on Current Line E28A DEY E28B CPY $D5 ; Physical Screen Line Length E28D BCC $E299 E28F JMP $E192 E292 iE292 CMP #$11 E294 BNE $E29C E296 JSR $E3A3 ; - Go to Next Line E299 iE299 JMP $E199 E29C iE29C CMP #$09 E29E BNE $E2D0 E2A0 JSR $E570 ; ? E2A3 iE2A3 LDY $033A ; Tape I/O Buffer #2 E2A6 INC $033A ; Tape I/O Buffer #2 E2A9 CPY $D5 ; Physical Screen Line Length E2AB BCC $E2B6 E2AD LDA $D5 ; Physical Screen Line Length E2AF STA $C6 ; Cursor Column on Current Line E2B1 DEC $033A ; Tape I/O Buffer #2 E2B4 BNE $E299 E2B6 iE2B6 ASL $033E ; 4: DOS 8-bit syntax checking flag E2B9 BNE $E2C5 E2BB INX E2BC CPX #$0A E2BE BEQ $E299 E2C0 LDA #$01 E2C2 STA $033E ; 4: DOS 8-bit syntax checking flag E2C5 iE2C5 LDA $03EE,X ; 4.80: Table of 80 bits to set TABs E2C8 AND $033E ; 4: DOS 8-bit syntax checking flag E2CB BEQ $E2A3 E2CD INY E2CE STY $C6 ; Cursor Column on Current Line E2D0 iE2D0 CMP #$16 E2D2 BNE $E2E0 E2D4 LDA #$20 E2D6 DEY E2D7 iE2D7 INY E2D8 STA ($C4),Y ; Pointer: Current Screen Line Address E2DA CPY $D5 ; Physical Screen Line Length E2DC BCC $E2D7 E2DE BCS $E299 E2E0 iE2E0 CMP #$15 E2E2 BEQ $E2E7 E2E4 JMP $E591 ; (?) E2E7 iE2E7 LDA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E2E9 PHA E2EA LDA $D8 ; Current Cursor Physical Line Number E2EC STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E2EE JSR $E3E8 ; - Scroll Screen E2F1 JMP $E5CA ; - -shifted characters- E2F4 iE2F4 AND #$7F E2F6 CMP #$7F E2F8 BNE $E2FC E2FA LDA #$5E E2FC iE2FC CMP #$20 E2FE BCC $E303 E300 JMP $E177 ; Ascii to Screen Code E303 iE303 CMP #$0D E305 BNE $E30A E307 JMP $E3B6 ; - Output E30A iE30A LDX $CD ; Flag: Editor in Quote Mode, $00 = NO E30C BNE $E342 E30E CMP #$14 E310 BNE $E33E E312 LDY $D5 ; Physical Screen Line Length E314 LDA ($C4),Y ; Pointer: Current Screen Line Address E316 CMP #$20 E318 BNE $E38C E31A CPY $C6 ; Cursor Column on Current Line E31C BCC $E38C E31E BEQ $E38C E320 LDY $D5 ; Physical Screen Line Length E322 iE322 DEY E323 LDA ($C4),Y ; Pointer: Current Screen Line Address E325 INY E326 STA ($C4),Y ; Pointer: Current Screen Line Address E328 DEY E329 CPY $C6 ; Cursor Column on Current Line E32B BNE $E322 E32D LDA #$20 E32F STA ($C4),Y ; Pointer: Current Screen Line Address E331 LDA $D5 ; Physical Screen Line Length E333 SEC E334 SBC $C6 ; Cursor Column on Current Line E336 SBC $DC ; Flag: Insert Mode, >0 = # INSTs E338 BMI $E38C E33A INC $DC ; Flag: Insert Mode, >0 = # INSTs E33C BNE $E38C E33E iE33E LDX $DC ; Flag: Insert Mode, >0 = # INSTs E340 BEQ $E347 E342 iE342 ORA #$40 E344 JMP $E17D E347 iE347 CMP #$11 E349 BNE $E358 E34B LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E34D CPX $D8 ; Current Cursor Physical Line Number E34F BCS $E38C E351 DEC $D8 ; Current Cursor Physical Line Number E353 JSR $E067 ; - Set Screen Pointers E356 BNE $E38C E358 iE358 CMP #$12 E35A BNE $E360 E35C LDA #$00 E35E STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used E360 iE360 CMP #$1D E362 BNE $E373 E364 LDY $E2 ; 4.80: first column of window E366 CPY $C6 ; Cursor Column on Current Line E368 BCC $E36F E36A JSR $E1AA E36D BNE $E38C E36F iE36F DEC $C6 ; Cursor Column on Current Line E371 BPL $E38C E373 iE373 CMP #$13 E375 BNE $E37C E377 JSR $E051 ; - Clear Screen E37A BNE $E38C E37C iE37C CMP #$09 E37E BNE $E38F E380 JSR $E570 ; ? E383 LDA $03EE,X ; 4.80: Table of 80 bits to set TABs E386 EOR $033E ; 4: DOS 8-bit syntax checking flag E389 STA $03EE,X ; 4.80: Table of 80 bits to set TABs E38C iE38C JMP $E199 E38F iE38F CMP #$16 E391 BEQ $E396 E393 JMP $E5BC E396 iE396 LDA #$20 E398 LDY $E2 ; 4.80: first column of window E39A iE39A CPY $C6 ; Cursor Column on Current Line E39C BCS $E38C E39E STA ($C4),Y ; Pointer: Current Screen Line Address E3A0 INY E3A1 BNE $E39A ; - Go to Next Line E3A3 iE3A3 LSR $A3 ; Cursor Y-X Pos. at Start of INPUT E3A5 LDX $D8 ; Current Cursor Physical Line Number E3A7 CPX $E1 ; 4.80: last line of window E3A9 BCC $E3B1 E3AB JSR $E3E8 ; - Scroll Screen E3AE JMP $E067 ; - Set Screen Pointers E3B1 iE3B1 INC $D8 ; Current Cursor Physical Line Number E3B3 JMP $E067 ; - Set Screen Pointers ; - Output E3B6 iE3B6 LDY $E2 ; 4.80: first column of window E3B8 STY $C6 ; Cursor Column on Current Line E3BA JSR $E3A3 ; - Go to Next Line E3BD iE3BD LDA #$00 E3BF STA $DC ; Flag: Insert Mode, >0 = # INSTs E3C1 STA $9F ; Flag: Print Reverse Chars. -1=Yes, 0=No Used E3C3 STA $CD ; Flag: Editor in Quote Mode, $00 = NO E3C5 JMP $E199 ; ? E3C8 iE3C8 LDX $E1 ; 4.80: last line of window E3CA INX E3CB iE3CB DEX E3CC JSR $E06C E3CF CPX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E3D1 BEQ $E408 E3D3 LDA $E754,X E3D6 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling E3D8 LDA $E76D,X E3DB STA $C8 E3DD iE3DD INY E3DE LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling E3E0 STA ($C4),Y ; Pointer: Current Screen Line Address E3E2 CPY $D5 ; Physical Screen Line Length E3E4 BCC $E3DD E3E6 BCS $E3CB ; - Scroll Screen E3E8 iE3E8 LDX $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E3EA DEX E3EB iE3EB INX E3EC JSR $E06C E3EF CPX $E1 ; 4.80: last line of window E3F1 BCS $E408 E3F3 LDA $E756,X E3F6 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling E3F8 LDA $E76F,X E3FB STA $C8 E3FD iE3FD INY E3FE LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling E400 STA ($C4),Y ; Pointer: Current Screen Line Address E402 CPY $D5 ; Physical Screen Line Length E404 BCC $E3FD E406 BCS $E3EB E408 iE408 JSR $E1C1 ; - Clear Screen Line E40B LDA $E812 E40E CMP #$FE E410 BNE $E420 E412 LDY #$00 E414 iE414 NOP E415 DEX E416 BNE $E414 E418 DEY E419 BNE $E414 E41B iE41B LDY #$00 E41D STY $9E ; No. of Chars. in Keyboard Buffer (Queue) E41F iE41F RTS E420 iE420 CMP #$DF E422 BNE $E41F E424 iE424 LDA $E812 E427 CMP #$DF E429 BEQ $E424 E42B CMP #$FF E42D BEQ $E424 E42F BNE $E41B E431 iE431 JSR $FFEA ; jmp $f768 udtim Update System Jiffy Clock E434 INC $F8 ; 4.80: Counter to speed TI by 6/5 E436 LDA $F8 ; 4.80: Counter to speed TI by 6/5 E438 CMP #$06 E43A BNE $E458 E43C LDA #$00 E43E STA $F8 ; 4.80: Counter to speed TI by 6/5 E440 BEQ $E431 ; - Main IRQ Entry Point E442 iE442 PHA E443 TXA E444 PHA E445 TYA E446 PHA E447 TSX E448 LDA $0104,X E44B AND #$10 E44D BEQ $E452 E44F JMP ($0092) ; Vector: BRK Instr. Interrupt [3: FD17, 4: D478] E452 iE452 JMP ($0090) ; Vector: Hardware Interrupt [3: E62E, 4: E455] ; ? E455 iE455 JMP $E431 E458 iE458 LDA $A7 ; Cursor Blink enable: 0 = Flash Cursor E45A BNE $E47A E45C DEC $A8 ; Timer: Countdown to Toggle Cursor E45E BNE $E47A E460 LDA #$14 E462 BIT $E4 E464 BPL $E468 E466 LDA #$02 E468 iE468 STA $A8 ; Timer: Countdown to Toggle Cursor E46A LDY $C6 ; Cursor Column on Current Line E46C LSR $AA ; Flag: Last Cursor Blink On/Off E46E LDA ($C4),Y ; Pointer: Current Screen Line Address E470 BCS $E476 E472 INC $AA ; Flag: Last Cursor Blink On/Off E474 STA $A9 ; Character Under Cursor E476 iE476 EOR #$80 E478 STA ($C4),Y ; Pointer: Current Screen Line Address E47A iE47A LDY #$00 E47C LDA $E810 ; PIA 1 CHIP E47F AND #$F0 E481 STA $E810 ; PIA 1 CHIP E484 LDA $E810 ; PIA 1 CHIP E487 ASL E488 ASL E489 ASL E48A BPL $E495 E48C STY $F9 ; Tape Motor Interlock #1 E48E LDA $E813 E491 ORA #$08 E493 BNE $E49E E495 iE495 LDA $F9 ; Tape Motor Interlock #1 E497 BNE $E4A1 E499 LDA $E813 E49C AND #$F7 E49E iE49E STA $E813 E4A1 iE4A1 BCC $E4AC E4A3 STY $FA ; Tape Motor Interlock #2 E4A5 LDA $E840 ; VIA CHIP E4A8 ORA #$10 E4AA BNE $E4B5 E4AC iE4AC LDA $FA ; Tape Motor Interlock #2 E4AE BNE $E4B8 E4B0 LDA $E840 ; VIA CHIP E4B3 AND #$EF E4B5 iE4B5 STA $E840 ; VIA CHIP E4B8 iE4B8 JSR $E4BE ; scnkey Scan Keyboard E4BB JMP $E600 ; - Return From Interrupt ; scnkey Scan Keyboard E4BE iE4BE LDY #$FF E4C0 STY $A6 ; Key Image E4C2 INY E4C3 STY $98 ; Flag: Print Shifted Chars. E4C5 LDA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E4C7 AND #$7F E4C9 STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E4CB LDX #$50 E4CD iE4CD LDY #$08 E4CF LDA $E812 E4D2 CMP $E812 E4D5 BNE $E4CD E4D7 iE4D7 LSR E4D8 BCS $E4F9 E4DA PHA E4DB LDA $E6D0,X E4DE BNE $E4E6 E4E0 LDA #$01 E4E2 STA $98 ; Flag: Print Shifted Chars. E4E4 BNE $E4F8 E4E6 iE4E6 CMP #$10 E4E8 BNE $E4F2 E4EA LDA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E4EC ORA #$80 E4EE STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E4F0 BMI $E4F8 E4F2 iE4F2 CMP #$FF E4F4 BEQ $E4F8 E4F6 STA $A6 ; Key Image E4F8 iE4F8 PLA E4F9 iE4F9 DEX E4FA BEQ $E504 ; - Process Key Image E4FC DEY E4FD BNE $E4D7 E4FF INC $E810 ; PIA 1 CHIP E502 BNE $E4CD ; - Process Key Image E504 iE504 LDA $A6 ; Key Image E506 CMP $97 ; Current Key Pressed: 255 = No Key E508 BEQ $E510 E50A LDX #$10 E50C STX $E6 ; 4.80: Repeat Delay Counter E50E BNE $E53F E510 iE510 BIT $E4 E512 BMI $E532 E514 BVS $E56F E516 CMP #$FF E518 BEQ $E56F E51A CMP #$14 E51C BEQ $E52A E51E CMP #$20 E520 BEQ $E52A E522 CMP #$1D E524 BEQ $E52A E526 CMP #$11 E528 BNE $E56F E52A iE52A LDX $E6 ; 4.80: Repeat Delay Counter E52C BEQ $E532 E52E DEC $E6 ; 4.80: Repeat Delay Counter E530 BNE $E56F E532 iE532 DEC $E5 ; 4.80: Repeat Speed Counter E534 BNE $E56F E536 LDX #$04 E538 STX $E5 ; 4.80: Repeat Speed Counter E53A LDX $9E ; No. of Chars. in Keyboard Buffer (Queue) E53C DEX E53D BPL $E56F E53F iE53F STA $97 ; Current Key Pressed: 255 = No Key E541 CMP #$FF E543 BEQ $E56F E545 TAX E546 PHP E547 AND #$7F E549 PLP E54A BMI $E563 E54C LSR $98 ; Flag: Print Shifted Chars. E54E BCC $E563 E550 CMP #$2C E552 BCC $E561 E554 CMP #$3C E556 BCS $E561 E558 SBC #$0F E55A CMP #$20 E55C BCS $E563 E55E ADC #$20 E560 BIT $8009 ; *** E560: ADDRESS DIFFER. This may indicate misassembly *** E563 iE563 LDX $9E ; No. of Chars. in Keyboard Buffer (Queue) E565 CPX $E3 ; 4.80: Size of Keyboard Buffer E567 BCS $E56F E569 STA $026F,X E56C INX E56D STX $9E ; No. of Chars. in Keyboard Buffer (Queue) E56F iE56F RTS ; ? E570 iE570 LDA $C6 ; Cursor Column on Current Line E572 AND #$F8 E574 STA $033A ; Tape I/O Buffer #2 E577 LSR E578 LSR E579 LSR E57A TAX E57B LDA #$01 E57D STA $033E ; 4: DOS 8-bit syntax checking flag E580 LDY $C6 ; Cursor Column on Current Line E582 iE582 CPY $033A ; Tape I/O Buffer #2 E585 BEQ $E590 E587 ASL $033E ; 4: DOS 8-bit syntax checking flag E58A INC $033A ; Tape I/O Buffer #2 E58D JMP $E582 E590 iE590 RTS ; (?) E591 iE591 CMP #$19 E593 BNE $E59B E595 JSR $E3E8 ; - Scroll Screen E598 JMP $E5D9 E59B iE59B CMP #$0F E59D BNE $E5AA E59F LDA $D8 ; Current Cursor Physical Line Number E5A1 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E5A3 LDA $C6 ; Cursor Column on Current Line E5A5 STA $E2 ; 4.80: first column of window E5A7 iE5A7 JMP $E199 E5AA iE5AA CMP #$0E E5AC BNE $E5B3 E5AE JSR $E07A ; Initialize CRTC -- E5B1 BMI $E5A7 E5B3 iE5B3 CMP #$07 E5B5 BNE $E5A7 E5B7 JSR $E6A7 ; ? E5BA BEQ $E5A7 E5BC iE5BC CMP #$15 E5BE BNE $E5D2 E5C0 LDA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E5C2 PHA E5C3 LDA $D8 ; Current Cursor Physical Line Number E5C5 STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E5C7 JSR $E3C8 ; ? E5CA iE5CA PLA E5CB STA $E0 ; 3+4.40: Screen Line Link Table / Editor Temps E5CD JSR $E063 E5D0 BNE $E5EA E5D2 iE5D2 CMP #$19 E5D4 BNE $E5DE E5D6 JSR $E3C8 ; ? E5D9 iE5D9 JSR $E067 ; - Set Screen Pointers E5DC BNE $E5EA E5DE iE5DE CMP #$0F E5E0 BNE $E5ED E5E2 LDA $D8 ; Current Cursor Physical Line Number E5E4 STA $E1 ; 4.80: last line of window E5E6 LDA $C6 ; Cursor Column on Current Line E5E8 STA $D5 ; Physical Screen Line Length E5EA iE5EA JMP $E199 E5ED iE5ED CMP #$0E E5EF BNE $E5B3 E5F1 JSR $E082 ; Initialize CRTC -- E5F4 BMI $E5EA E5F6 TAX E5F7 TAX E5F8 TAX E5F9 TAX E5FA TAX E5FB TAX E5FC TAX E5FD TAX E5FE TAX E5FF TAX ; - Return From Interrupt E600 iE600 PLA E601 TAY E602 PLA E603 TAX E604 PLA E605 RTI ; ? E606 iE606 LDY $C6 ; Cursor Column on Current Line E608 STA ($C4),Y ; Pointer: Current Screen Line Address E60A LDA #$02 E60C STA $A8 ; Timer: Countdown to Toggle Cursor E60E RTS ; cint1 Initialize I/O E60F iE60F LDA #$7F E611 STA $E84E E614 LDX #$6D E616 LDA #$00 E618 STA $E8 ; 4.80: Home Count E61A STA $E4 ; 4.80: Flag: REPEAT Key Used, $80 = Repeat, $40 = disable E61C iE61C STA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec E61E DEX E61F BPL $E61C E621 LDA #$55 E623 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455] E625 LDA #$E4 E627 STA $91 E629 LDA #$09 E62B STA $E3 ; 4.80: Size of Keyboard Buffer E62D LDA #$03 E62F STA $B0 ; Default Output (CMD) Device (3) E631 LDA #$0F E633 STA $E810 ; PIA 1 CHIP E636 ASL E637 STA $E840 ; VIA CHIP E63A STA $E842 E63D STX $E822 E640 STX $E845 E643 LDA #$3D E645 STA $E813 E648 BIT $E812 E64B LDA #$3C E64D STA $E821 E650 STA $E823 E653 STA $E811 E656 STX $E822 E659 LDA #$0E E65B STA $A8 ; Timer: Countdown to Toggle Cursor E65D STA $A7 ; Cursor Blink enable: 0 = Flash Cursor E65F STA $E6 ; 4.80: Repeat Delay Counter E661 STA $E5 ; 4.80: Repeat Speed Counter E663 STA $E84E E666 JSR $E1D2 ; Exit Window E669 LDX #$0C E66B LDA #$00 E66D iE66D STA $03EE,X ; 4.80: Table of 80 bits to set TABs E670 DEX E671 BPL $E66D E673 LDA #$1D E675 LDX #$E1 E677 STA $E9 ; 4.80: input from screen vector (from E006) E679 STX $EA E67B LDA #$0C E67D LDX #$E2 E67F STA $EB ; 4.80: print to screen vector (from E009) E681 STX $EC E683 LDA #$10 E685 STA $E7 ; 4.80: Chime Time E687 JSR $E6A4 E68A BEQ $E6A4 E68C iE68C JSR $E202 ; - Output to Screen E68F TAX E690 LDA $D5 ; Physical Screen Line Length E692 SEC E693 SBC $C6 ; Cursor Column on Current Line E695 CMP #$05 E697 BNE $E6D0 E699 TXA E69A CMP #$1D E69C BEQ $E6A4 E69E AND #$7F E6A0 CMP #$20 E6A2 BCC $E6D0 E6A4 iE6A4 JSR $E6A7 ; ? ; ? E6A7 iE6A7 LDY $E7 ; 4.80: Chime Time E6A9 BEQ $E6D0 E6AB LDA #$10 E6AD STA $E84B E6B0 LDA #$0F E6B2 STA $E84A E6B5 LDX #$07 E6B7 iE6B7 LDA $E74D,X ; Timer 2 LO Values DATA E6BA STA $E848 E6BD LDA $E7 ; 4.80: Chime Time E6BF iE6BF DEY E6C0 BNE $E6BF E6C2 SEC E6C3 SBC #$01 E6C5 BNE $E6BF E6C7 DEX E6C8 BNE $E6B7 E6CA STX $E84A E6CD STX $E84B E6D0 sE6D0 RTS ; - Keyboard decoding table DATA ; 00 = Shift ; 10 = Repeat ; 80 flags unshiftable key ; FF = No key ; E6D1 .byte 16 04 3A 03 39 36 33 DF ;..:.963. E6D9 .byte B1 2F 15 13 4D 20 58 12 ;./..m x. E6E1 .byte B2 10 0F B0 2C 4E 56 5A ;....,nvz E6E9 .byte B3 00 19 AE 2E 42 43 00 ;.....bc. E6F1 .byte B4 5D 4F 11 55 54 45 51 ;.]o.uteq E6F9 .byte 14 50 49 C0 59 52 57 09 ;.pi.yrw. E701 .byte B6 5B 4C 0D 4A 47 44 41 ;.[l.jgda E709 .byte B5 5C 4B 3B 48 46 53 9B ;.\k;hfs. E711 .byte B9 06 DE B7 B0 37 34 31 ;.....741 E719 .byte 05 0E 1D B8 2D 38 35 ;....-85 E720 sE720 .byte 32 ;2 ; Shitf-Run Equivalent DATA E721 .byte 44 CC 22 2A 0D 52 55 4E ;dL"*.run E729 .byte 0D ;. ; - Video Chip Setup Table -- e07a DATA E72A .byte 31 28 29 0F 27 00 19 20 ;1().'.. E732 .byte 00 09 00 00 10 00 00 00 ;........ E73A .byte 00 00 ;.. ; - Video Chip Setup Table -- e08a DATA E73C .byte 31 28 29 0F 31 00 19 25 ;1().1..% E744 .byte 00 07 00 00 10 00 00 00 ;........ E74C .byte 00 ;. ; Timer 2 LO Values DATA E74D sE74D .byte 00 0E 1E 3E 7E 3E 1E ;...>~>. E754 sE754 .byte 0E ;. ; - Screen Line Addresses LO DATA E755 sE755 .byte 00 ;. E756 sE756 .byte 50 A0 F0 40 90 E0 30 80 ;p..@..0. E75E .byte D0 20 70 C0 10 60 B0 00 ;P P..`.. E766 .byte 50 A0 F0 40 90 E0 30 ;p..@..0 E76D sE76D .byte 80 ;. ; - Screen Line Addresses HI DATA E76E sE76E .byte 80 ;. E76F sE76F .byte 80 80 80 81 81 81 82 82 ;........ E777 .byte 82 83 83 83 84 84 84 85 ;........ E77F .byte 85 85 85 86 86 86 87 87 ;........ E787 .byte BF ;. ; Unused EMPTY ; ; I/O Area E800 - EFFF ; E788 .byte AA AA AA AA AA AA AA AA ;........ E790 .byte AA AA AA AA AA AA AA AA ;........ E798 .byte AA AA AA AA AA AA AA AA ;........ E7A0 .byte AA AA AA AA AA AA AA AA ;........ E7A8 .byte AA AA AA AA AA AA AA AA ;........ E7B0 .byte AA AA AA AA AA AA AA AA ;........ E7B8 .byte AA AA AA AA AA AA AA AA ;........ E7C0 .byte AA AA AA AA AA AA AA AA ;........ E7C8 .byte AA AA AA AA AA AA AA AA ;........ E7D0 .byte AA AA AA AA AA AA AA AA ;........ E7D8 .byte AA AA AA AA AA AA AA AA ;........ E7E0 .byte AA AA AA AA AA AA AA AA ;........ E7E8 .byte AA AA AA AA AA AA AA AA ;........ E7F0 .byte AA AA AA AA AA AA AA AA ;........ E7F8 .byte AA AA AA AA AA AA AA AA ;........ ; Unused EMPTY E800 .byte E8 E8 E8 E8 E8 E8 E8 E8 ;........ E808 .byte E8 E8 E8 E8 E8 E8 E8 E8 ;........ ; PIA 1 CHIP E810 sE810 .byte F9 ;. E811 sE811 .byte 3C ;< E812 sE812 .byte FF ;. E813 sE813 .byte 3D F9 3C FF 3D F9 3C FF ;=.<.=.<. E81B .byte 3D F9 3C FF 3D ;=.<.= ; PIA 2 CHIP E820 sE820 .byte FF ;. E821 sE821 .byte BC ;. E822 sE822 .byte FF ;. E823 sE823 .byte 3C FF BC FF 3C FF BC FF ;<...<... E82B .byte 3C FF BC FF 3C F9 3C FF ;<...<.<. E833 .byte 3C F9 3C FF 3C F9 3C FF ;<.<.<.<. E83B .byte 3C F9 3C FF 3C ;<.<.< ; VIA CHIP E840 sE840 .byte FE FF ;.. E842 sE842 .byte 1E 00 ;.. E844 sE844 .byte 5B ;[ E845 sE845 .byte F9 77 FF ;.W. E848 sE848 .byte 7D ;} E849 sE849 .byte 26 ;& E84A sE84A .byte 00 ;. E84B sE84B .byte 00 ;. E84C sE84C .byte 0E 00 ;.. E84E sE84E .byte 80 FF FE FF 1E 00 5B F9 ;......[. E856 .byte 77 FF 3E 5B 00 00 0E 00 ;W.>[.... E85E .byte 80 FF FE FF 1E 00 5B F9 ;......[. E866 .byte 77 FF 01 E9 00 00 0E 00 ;W....... E86E .byte 80 FF FE BC 1E 00 5B B8 ;......[. E876 .byte 77 3D C9 0C 00 00 0E 00 ;W=I..... E87E .byte 80 3D ;.= ; 6545/6845 CRT CHIP E880 sE880 .byte E8 ;. E881 sE881 .byte 00 E8 00 E8 00 E8 00 E8 ;........ E889 .byte 00 E8 00 E8 00 E8 00 F9 ;........ E891 .byte 00 FF 00 F9 00 FF 00 F9 ;........ E899 .byte 00 FF 00 F9 00 FF 00 FF ;........ E8A1 .byte 00 FF 00 FF 00 FF 00 FF ;........ E8A9 .byte 00 FF 00 FF 00 FF 00 F9 ;........ E8B1 .byte 00 FF 00 F9 00 FF 00 F9 ;........ E8B9 .byte 00 FF 00 F9 00 FF 00 ;....... ; ? CHIP E8C0 .byte FE 00 1E 00 5B 80 77 00 ;....[.W. E8C8 .byte 2A A0 00 00 0E 00 80 00 ;*....... E8D0 .byte FE 30 1E 00 5B 38 77 3C ;.0..[8W< E8D8 .byte E5 14 00 00 0E 00 80 3C ;.......< E8E0 .byte FE BC 1E 00 5B B8 77 30 ;....[.W0 E8E8 .byte 71 08 00 00 0E 00 80 30 ;Q......0 E8F0 .byte FE 3C 1E 00 5B 38 77 3C ;.<..[8W< E8F8 .byte 89 28 00 00 0E 00 80 3C ;.(.....< ; Unused EMPTY ; ; Kernel (F000-FFFF) ; Tape processing, IEEE-488, jump table ; E900 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E908 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E910 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E918 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E920 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E928 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E930 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E938 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E940 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E948 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E950 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E958 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E960 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E968 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E970 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E978 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E980 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E988 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E990 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E998 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9A0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9A8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9B0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9B8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9C0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9C8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9D0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9D8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9E0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9E8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9F0 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ E9F8 .byte E9 E9 E9 E9 E9 E9 E9 E9 ;........ EA00 .byte EA EA EA EA EA EA EA EA ;........ EA08 .byte EA EA EA EA EA EA EA EA ;........ EA10 .byte EA EA EA EA EA EA EA EA ;........ EA18 .byte EA EA EA EA EA EA EA EA ;........ EA20 .byte EA EA EA EA EA EA EA EA ;........ EA28 .byte EA EA EA EA EA EA EA EA ;........ EA30 .byte EA EA EA EA EA EA EA EA ;........ EA38 .byte EA EA EA EA EA EA EA EA ;........ EA40 .byte EA EA EA EA EA EA EA EA ;........ EA48 .byte EA EA EA EA EA EA EA EA ;........ EA50 .byte EA EA EA EA EA EA EA EA ;........ EA58 .byte EA EA EA EA EA EA EA EA ;........ EA60 sEA60 .byte EA EA EA EA EA EA EA EA ;........ EA68 .byte EA EA EA EA EA EA EA EA ;........ EA70 .byte EA EA EA EA EA EA EA EA ;........ EA78 .byte EA EA EA EA EA EA EA EA ;........ EA80 .byte EA EA EA EA EA EA EA EA ;........ EA88 .byte EA EA EA EA EA EA EA EA ;........ EA90 .byte EA EA EA EA EA EA EA EA ;........ EA98 .byte EA EA EA EA EA EA EA EA ;........ EAA0 .byte EA EA EA EA EA EA EA EA ;........ EAA8 .byte EA EA EA EA EA EA EA EA ;........ EAB0 .byte EA EA EA EA EA EA EA EA ;........ EAB8 .byte EA EA EA EA EA EA EA EA ;........ EAC0 .byte EA EA EA EA EA EA EA EA ;........ EAC8 .byte EA EA EA EA EA EA EA EA ;........ EAD0 .byte EA EA EA EA EA EA EA EA ;........ EAD8 .byte EA EA EA EA EA EA EA EA ;........ EAE0 .byte EA EA EA EA EA EA EA EA ;........ EAE8 .byte EA EA EA EA EA EA EA EA ;........ EAF0 .byte EA EA EA EA EA EA EA EA ;........ EAF8 .byte EA EA EA EA EA EA EA EA ;........ EB00 .byte EB EB EB EB EB EB EB EB ;........ EB08 .byte EB EB EB EB EB EB EB EB ;........ EB10 .byte EB EB EB EB EB EB EB EB ;........ EB18 .byte EB EB EB EB EB EB EB EB ;........ EB20 .byte EB EB EB EB EB EB EB EB ;........ EB28 .byte EB EB EB EB EB EB EB EB ;........ EB30 .byte EB EB EB EB EB EB EB EB ;........ EB38 .byte EB EB EB EB EB EB EB EB ;........ EB40 .byte EB EB EB EB EB EB EB EB ;........ EB48 .byte EB EB EB EB EB EB EB EB ;........ EB50 .byte EB EB EB EB EB EB EB EB ;........ EB58 .byte EB EB EB EB EB EB EB EB ;........ EB60 .byte EB EB EB EB EB EB EB EB ;........ EB68 .byte EB EB EB EB EB EB EB EB ;........ EB70 .byte EB EB EB EB EB EB EB EB ;........ EB78 .byte EB EB EB EB EB EB EB EB ;........ EB80 .byte EB EB EB EB EB EB EB EB ;........ EB88 .byte EB EB EB EB EB EB EB EB ;........ EB90 .byte EB EB EB EB EB EB EB EB ;........ EB98 .byte EB EB EB EB EB EB EB EB ;........ EBA0 .byte EB EB EB EB EB EB EB EB ;........ EBA8 .byte EB EB EB EB EB EB EB EB ;........ EBB0 .byte EB EB EB EB EB EB EB EB ;........ EBB8 .byte EB EB EB EB EB EB EB EB ;........ EBC0 .byte EB EB EB EB EB EB EB EB ;........ EBC8 .byte EB EB EB EB EB EB EB EB ;........ EBD0 .byte EB EB EB EB EB EB EB EB ;........ EBD8 .byte EB EB EB EB EB EB EB EB ;........ EBE0 .byte EB EB EB EB EB EB EB EB ;........ EBE8 .byte EB EB EB EB EB EB EB EB ;........ EBF0 .byte EB EB EB EB EB EB EB EB ;........ EBF8 .byte EB EB EB EB EB EB EB EB ;........ EC00 .byte EC EC EC EC EC EC EC EC ;........ EC08 .byte EC EC EC EC EC EC EC EC ;........ EC10 .byte EC EC EC EC EC EC EC EC ;........ EC18 .byte EC EC EC EC EC EC EC EC ;........ EC20 .byte EC EC EC EC EC EC EC EC ;........ EC28 .byte EC EC EC EC EC EC EC EC ;........ EC30 .byte EC EC EC EC EC EC EC EC ;........ EC38 .byte EC EC EC EC EC EC EC EC ;........ EC40 .byte EC EC EC EC EC EC EC EC ;........ EC48 .byte EC EC EC EC EC EC EC EC ;........ EC50 .byte EC EC EC EC EC EC EC EC ;........ EC58 .byte EC EC EC EC EC EC EC EC ;........ EC60 .byte EC EC EC EC EC EC EC EC ;........ EC68 .byte EC EC EC EC EC EC EC EC ;........ EC70 .byte EC EC EC EC EC EC EC EC ;........ EC78 .byte EC EC EC EC EC EC EC EC ;........ EC80 .byte EC EC EC EC EC EC EC EC ;........ EC88 .byte EC EC EC EC EC EC EC EC ;........ EC90 .byte EC EC EC EC EC EC EC EC ;........ EC98 .byte EC EC EC EC EC EC EC EC ;........ ECA0 .byte EC EC EC EC EC EC EC EC ;........ ECA8 .byte EC EC EC EC EC EC EC EC ;........ ECB0 .byte EC EC EC EC EC EC EC EC ;........ ECB8 .byte EC EC EC EC EC EC EC EC ;........ ECC0 .byte EC EC EC EC EC EC EC EC ;........ ECC8 .byte EC EC EC EC EC EC EC EC ;........ ECD0 .byte EC EC EC EC EC EC EC EC ;........ ECD8 .byte EC EC EC EC EC EC EC EC ;........ ECE0 .byte EC EC EC EC EC EC EC EC ;........ ECE8 .byte EC EC EC EC EC EC EC EC ;........ ECF0 .byte EC EC EC EC EC EC EC EC ;........ ECF8 .byte EC EC EC EC EC EC EC EC ;........ ED00 .byte ED ED ED ED ED ED ED ED ;........ ED08 .byte ED ED ED ED ED ED ED ED ;........ ED10 .byte ED ED ED ED ED ED ED ED ;........ ED18 .byte ED ED ED ED ED ED ED ED ;........ ED20 .byte ED ED ED ED ED ED ED ED ;........ ED28 .byte ED ED ED ED ED ED ED ED ;........ ED30 .byte ED ED ED ED ED ED ED ED ;........ ED38 .byte ED ED ED ED ED ED ED ED ;........ ED40 .byte ED ED ED ED ED ED ED ED ;........ ED48 .byte ED ED ED ED ED ED ED ED ;........ ED50 .byte ED ED ED ED ED ED ED ED ;........ ED58 .byte ED ED ED ED ED ED ED ED ;........ ED60 .byte ED ED ED ED ED ED ED ED ;........ ED68 .byte ED ED ED ED ED ED ED ED ;........ ED70 .byte ED ED ED ED ED ED ED ED ;........ ED78 .byte ED ED ED ED ED ED ED ED ;........ ED80 .byte ED ED ED ED ED ED ED ED ;........ ED88 .byte ED ED ED ED ED ED ED ED ;........ ED90 .byte ED ED ED ED ED ED ED ED ;........ ED98 .byte ED ED ED ED ED ED ED ED ;........ EDA0 .byte ED ED ED ED ED ED ED ED ;........ EDA8 .byte ED ED ED ED ED ED ED ED ;........ EDB0 .byte ED ED ED ED ED ED ED ED ;........ EDB8 .byte ED ED ED ED ED ED ED ED ;........ EDC0 .byte ED ED ED ED ED ED ED ED ;........ EDC8 .byte ED ED ED ED ED ED ED ED ;........ EDD0 .byte ED ED ED ED ED ED ED ED ;........ EDD8 .byte ED ED ED ED ED ED ED ED ;........ EDE0 .byte ED ED ED ED ED ED ED ED ;........ EDE8 .byte ED ED ED ED ED ED ED ED ;........ EDF0 .byte ED ED ED ED ED ED ED ED ;........ EDF8 .byte ED ED ED ED ED ED ED ED ;........ EE00 .byte EE EE EE EE EE EE EE EE ;........ EE08 .byte EE EE EE EE EE EE EE EE ;........ EE10 .byte EE EE EE EE EE EE EE EE ;........ EE18 .byte EE EE EE EE EE EE EE EE ;........ EE20 .byte EE EE EE EE EE EE EE EE ;........ EE28 .byte EE EE EE EE EE EE EE EE ;........ EE30 .byte EE EE EE EE EE EE EE EE ;........ EE38 .byte EE EE EE EE EE EE EE EE ;........ EE40 .byte EE EE EE EE EE EE EE EE ;........ EE48 .byte EE EE EE EE EE EE EE EE ;........ EE50 .byte EE EE EE EE EE EE EE EE ;........ EE58 .byte EE EE EE EE EE EE EE EE ;........ EE60 .byte EE EE EE EE EE EE EE EE ;........ EE68 .byte EE EE EE EE EE EE EE EE ;........ EE70 .byte EE EE EE EE EE EE EE EE ;........ EE78 .byte EE EE EE EE EE EE EE EE ;........ EE80 .byte EE EE EE EE EE EE EE EE ;........ EE88 .byte EE EE EE EE EE EE EE EE ;........ EE90 .byte EE EE EE EE EE EE EE EE ;........ EE98 .byte EE EE EE EE EE EE EE EE ;........ EEA0 .byte EE EE EE EE EE EE EE EE ;........ EEA8 .byte EE EE EE EE EE EE EE EE ;........ EEB0 .byte EE EE EE EE EE EE EE EE ;........ EEB8 .byte EE EE EE EE EE EE EE EE ;........ EEC0 .byte EE EE EE EE EE EE EE EE ;........ EEC8 .byte EE EE EE EE EE EE EE EE ;........ EED0 .byte EE EE EE EE EE EE EE EE ;........ EED8 .byte EE EE EE EE EE EE EE EE ;........ EEE0 .byte EE EE EE EE EE EE EE EE ;........ EEE8 .byte EE EE EE EE EE EE EE EE ;........ EEF0 .byte EE EE EE EE EE EE EE EE ;........ EEF8 .byte EE EE EE EE EE EE EE EE ;........ EF00 .byte EF EF EF EF EF EF EF EF ;........ EF08 .byte EF EF EF EF EF EF EF EF ;........ EF10 .byte EF EF EF EF EF EF EF EF ;........ EF18 .byte EF EF EF EF EF EF EF EF ;........ EF20 .byte EF EF EF EF EF EF EF EF ;........ EF28 .byte EF EF EF EF EF EF EF EF ;........ EF30 .byte EF EF EF EF EF EF EF EF ;........ EF38 .byte EF EF EF EF EF EF EF EF ;........ EF40 .byte EF EF EF EF EF EF EF EF ;........ EF48 .byte EF EF EF EF EF EF EF EF ;........ EF50 .byte EF EF EF EF EF EF EF EF ;........ EF58 .byte EF EF EF EF EF EF EF EF ;........ EF60 .byte EF EF EF EF EF EF EF EF ;........ EF68 .byte EF EF EF EF EF EF EF EF ;........ EF70 .byte EF EF EF EF EF EF EF EF ;........ EF78 .byte EF EF EF EF EF EF EF EF ;........ EF80 .byte EF EF EF EF EF EF EF EF ;........ EF88 .byte EF EF EF EF EF EF EF EF ;........ EF90 .byte EF EF EF EF EF EF EF EF ;........ EF98 .byte EF EF EF EF EF EF EF EF ;........ EFA0 .byte EF EF EF EF EF EF EF EF ;........ EFA8 .byte EF EF EF EF EF EF EF EF ;........ EFB0 .byte EF EF EF EF EF EF EF EF ;........ EFB8 .byte EF EF EF EF EF EF EF EF ;........ EFC0 .byte EF EF EF EF EF EF EF EF ;........ EFC8 .byte EF EF EF EF EF EF EF EF ;........ EFD0 .byte EF EF EF EF EF EF EF EF ;........ EFD8 .byte EF EF EF EF EF EF EF EF ;........ EFE0 .byte EF EF EF EF EF EF EF EF ;........ EFE8 .byte EF EF EF EF EF EF EF EF ;........ EFF0 .byte EF EF EF EF EF EF EF EF ;........ EFF8 .byte EF EF EF EF EF EF EF EF ;........ ; - Table of Kernal I/O Messages DATA ; Addr ErrNr Message ; ; F000 00 'too many files' ; F00E 0e 'file open' ; F018 18 'file not open ' ; F024 24 'file not found' ; F032 32 'searching.' ; F03D 3d 'for.' ; F041 41 'press play.' ; F04D 4d '& record.' ; F056 56 'on tape .' ; F05F 5f 'load' ; F064 64 'writing.' ; F06D 6d 'verify' ; F074 74 'device not present' ; F086 86 'not input file' ; F094 94 'not output file' ; F0A3 a3 'found.' ; F0AA aa 'ok' ; F0AE ae 'ready.' ; F0B6 b6 'are you sure ?' ; F0C5 c5 '? bad disk ' ; F000 sF000 .byte 54 4F 4F 20 4D 41 4E 59 ;too many F008 .byte 20 46 49 4C 45 D3 46 49 ; fileSfi F010 .byte 4C 45 20 4F 50 45 CE 46 ;le opeNf F018 .byte 49 4C 45 20 4E 4F 54 20 ;ile not F020 .byte 4F 50 45 CE 46 49 4C 45 ;opeNfile F028 .byte 20 4E 4F 54 20 46 4F 55 ; not fou F030 .byte 4E C4 0D 53 45 41 52 43 ;nD.searc F038 .byte 48 49 4E 47 A0 46 4F 52 ;hing.for F040 .byte A0 0D 50 52 45 53 53 20 ;..press F048 .byte 50 4C 41 59 A0 26 20 52 ;play.& r F050 .byte 45 43 4F 52 44 A0 4F 4E ;ecord.on F058 .byte 20 54 41 50 45 20 A3 0D ; tape .. F060 .byte 4C 4F 41 C4 0D 57 52 49 ;loaD.wri F068 .byte 54 49 4E 47 A0 0D 56 45 ;ting..ve F070 .byte 52 49 46 D9 44 45 56 49 ;rifYdevi F078 .byte 43 45 20 4E 4F 54 20 50 ;ce not p F080 .byte 52 45 53 45 4E D4 4E 4F ;resenTno F088 .byte 54 20 49 4E 50 55 54 20 ;t input F090 .byte 46 49 4C C5 4E 4F 54 20 ;filEnot F098 .byte 4F 55 54 50 55 54 20 46 ;output f F0A0 .byte 49 4C C5 0D 46 4F 55 4E ;ilE.foun F0A8 .byte 44 A0 0D 4F 4B 8D 0D 52 ;d..ok..r F0B0 .byte 45 41 44 59 2E 8D 0D 41 ;eady...a F0B8 .byte 52 45 20 59 4F 55 20 53 ;re you s F0C0 .byte 55 52 45 20 BF 0D 3F 20 ;ure ..? F0C8 .byte 42 41 44 20 44 49 53 4B ;bad disk F0D0 .byte 20 8D ; . ; talk Send TALK Command on IEEE Bus F0D2 iF0D2 LDA #$40 F0D4 BIT $20A9 ; *** Resyncing *** ; listn Send LISTEN Command on IEEE Bus F0D5 iF0D5 LDA #$20 F0D7 iF0D7 PHA F0D8 LDA $E840 ; VIA CHIP F0DB ORA #$02 F0DD STA $E840 ; VIA CHIP F0E0 LDA #$3C F0E2 STA $E821 F0E5 BIT $A0 F0E7 BEQ $F0FA F0E9 LDA #$34 F0EB STA $E811 F0EE JSR $F109 ; - Send Data On IEEE Bus F0F1 LDA #$00 F0F3 STA $A0 ; Flag: IEEE Bus-Output Char. Buffered F0F5 LDA #$3C F0F7 STA $E811 F0FA iF0FA PLA F0FB ORA $D4 ; Current Device Number F0FD STA $A5 ; Buffered Character for IEEE Bus F0FF iF0FF LDA $E840 ; VIA CHIP F102 BPL $F0FF F104 AND #$FB F106 STA $E840 ; VIA CHIP ; - Send Data On IEEE Bus ; - Flag Errors F109 iF109 LDA #$3C F10B STA $E823 F10E LDA $E840 ; VIA CHIP F111 AND #$41 F113 CMP #$41 F115 BEQ $F16C ; - Status #80 - device not present F117 LDA $A5 ; Buffered Character for IEEE Bus F119 EOR #$FF F11B STA $E822 F11E iF11E BIT $E840 F121 BVC $F11E F123 LDA #$34 F125 STA $E823 F128 iF128 LDA #$FF F12A STA $E845 F12D iF12D LDA $E840 ; VIA CHIP F130 BIT $E84D F133 BVS $F151 F135 LSR F136 BCC $F12D F138 iF138 LDA #$3C F13A STA $E823 F13D LDA #$FF F13F STA $E822 F142 RTS F143 iF143 STA $A5 ; Buffered Character for IEEE Bus F145 JSR $F109 ; - Send Data On IEEE Bus F148 iF148 LDA $E840 ; VIA CHIP F14B ORA #$04 F14D STA $E840 ; VIA CHIP F150 RTS F151 iF151 LDA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout F154 BPL $F165 ; - Status #01 - ?? F156 JSR $F343 ; stop Check STOP Key F159 BNE $F128 F15B iF15B LDA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout F15E BPL $F170 ; - Status #02 - read timeout F160 JSR $F343 ; stop Check STOP Key F163 BNE $F1CD ; - Status #01 - ?? F165 iF165 LDA #$01 F167 iF167 JSR $FBC4 ; - Set Status Bit F16A BNE $F138 ; - Status #80 - device not present F16C iF16C LDA #$80 F16E BMI $F167 ; - Status #02 - read timeout F170 iF170 LDA #$02 F172 JSR $FBC4 ; - Set Status Bit F175 iF175 LDA $E840 ; VIA CHIP F178 AND #$FD F17A STA $E840 ; VIA CHIP F17D LDA #$34 F17F STA $E821 F182 LDA #$0D F184 RTS ; - Print Message F185 iF185 LDA $F000,Y ; - Table of Kernal I/O Messages DATA F188 PHP F189 AND #$7F F18B JSR $E202 ; - Output to Screen F18E INY F18F PLP F190 BPL $F185 ; - Print Message F192 RTS F193 iF193 STA $A5 ; Buffered Character for IEEE Bus F195 JSR $F109 ; - Send Data On IEEE Bus F198 iF198 JSR $F175 F19B JMP $F148 F19E iF19E BIT $A0 F1A0 BMI $F1A6 F1A2 DEC $A0 ; Flag: IEEE Bus-Output Char. Buffered F1A4 BNE $F1AB F1A6 iF1A6 PHA F1A7 JSR $F109 ; - Send Data On IEEE Bus F1AA PLA F1AB iF1AB STA $A5 ; Buffered Character for IEEE Bus F1AD RTS ; untlk Send UNTALK F1AE iF1AE LDA $E840 ; VIA CHIP F1B1 AND #$FB F1B3 STA $E840 ; VIA CHIP F1B6 LDA #$5F F1B8 BIT $3FA9 ; *** Resyncing *** ; untlk Send UNLISTEN F1B9 iF1B9 LDA #$3F F1BB JSR $F0D7 F1BE BNE $F148 F1C0 iF1C0 LDA #$34 F1C2 STA $E821 F1C5 LDA $E840 ; VIA CHIP F1C8 ORA #$02 F1CA STA $E840 ; VIA CHIP F1CD iF1CD LDA #$FF F1CF STA $E845 F1D2 iF1D2 BIT $E84D F1D5 BVS $F15B F1D7 BIT $E840 F1DA BMI $F1D2 F1DC LDA $E840 ; VIA CHIP F1DF AND #$FD F1E1 STA $E840 ; VIA CHIP F1E4 BIT $E810 F1E7 BVS $F1EE F1E9 LDA #$40 F1EB JSR $FBC4 ; - Set Status Bit F1EE iF1EE LDA $E820 ; PIA 2 CHIP F1F1 EOR #$FF F1F3 PHA F1F4 LDA #$3C F1F6 STA $E821 F1F9 iF1F9 BIT $E840 F1FC BPL $F1F9 F1FE LDA #$34 F200 STA $E821 F203 PLA F204 RTS ; - Input From Screen or Keyboard F205 iF205 LDA #$00 F207 STA $96 ; Kernal I/O Status Word: ST F209 LDA $AF ; Default Input Device (0) F20B BNE $F224 F20D LDA $9E ; No. of Chars. in Keyboard Buffer (Queue) F20F BEQ $F262 F211 SEI F212 JMP $E0A7 ; lp2 Get Character From Keyboard Buffer ; chrin Input a byte F215 iF215 LDA $AF ; Default Input Device (0) F217 BNE $F224 F219 LDA $C6 ; Cursor Column on Current Line F21B STA $A4 F21D LDA $D8 ; Current Cursor Physical Line Number F21F STA $A3 ; Cursor Y-X Pos. at Start of INPUT F221 JMP $E116 ; Input From Screen or Keyboard F224 iF224 CMP #$03 F226 BNE $F231 ; - Get From Tape / IEEE F228 STA $AC ; Flag: INPUT or GET from Keyboard F22A LDA $D5 ; Physical Screen Line Length F22C STA $A1 ; Pointer: End of Logical Line for INPUT F22E JMP $E116 ; Input From Screen or Keyboard ; - Get From Tape / IEEE F231 iF231 BCS $F25C F233 STX $AD ; X save in tape handling (saves cassette #) F235 JSR $F249 F238 PHA F239 JSR $F249 F23C BNE $F243 F23E LDA #$40 F240 JSR $FBC4 ; - Set Status Bit F243 iF243 DEC $BA,X F245 LDX $AD ; X save in tape handling (saves cassette #) F247 PLA F248 RTS F249 iF249 JSR $F84B ; - Bump Tape Pointer F24C BNE $F259 F24E JSR $F89A ; - Initiate Tape Read F251 LDX $D4 ; Current Device Number F253 LDA #$00 F255 STA $BA,X F257 BEQ $F249 F259 iF259 LDA ($D6),Y ; Pointer: Start of Tape Buffer F25B RTS F25C iF25C LDA $96 ; Kernal I/O Status Word: ST F25E BEQ $F263 F260 LDA #$0D F262 iF262 RTS F263 iF263 JMP $F1C0 ; chrout Output One Character F266 iF266 PHA F267 LDA $B0 ; Default Output (CMD) Device (3) F269 CMP #$03 F26B BNE $F271 F26D PLA F26E JMP $E202 ; - Output to Screen F271 iF271 BMI $F277 F273 PLA F274 JMP $F19E F277 iF277 PLA F278 iF278 STA $B4 F27A CMP #$0A F27C BEQ $F262 F27E PHA F27F TXA F280 PHA F281 TYA F282 PHA F283 JSR $F84B ; - Bump Tape Pointer F286 BNE $F298 F288 JSR $F8CB ; - Initiate Tape Write F28B LDX $D4 ; Current Device Number F28D LDA #$01 F28F STA $BA,X F291 LDY #$00 F293 LDA #$02 F295 STA ($D6),Y ; Pointer: Start of Tape Buffer F297 INY F298 iF298 LDA $B4 F29A STA ($D6),Y ; Pointer: Start of Tape Buffer F29C iF29C PLA F29D TAY F29E PLA F29F TAX F2A0 PLA F2A1 RTS ; clall Abort All Files F2A2 iF2A2 LDA #$00 F2A4 STA $AE ; No. of Open Files / Index to File Table ; clrchn Restore Default I/O F2A6 iF2A6 LDA $B0 ; Default Output (CMD) Device (3) F2A8 CMP #$04 F2AA BCC $F2AF F2AC JSR $F1B9 ; untlk Send UNLISTEN F2AF iF2AF LDA $AF ; Default Input Device (0) F2B1 CMP #$04 F2B3 BCC $F2B8 F2B5 JSR $F1AE ; untlk Send UNTALK F2B8 iF2B8 LDA #$03 F2BA STA $B0 ; Default Output (CMD) Device (3) F2BC LDA #$00 F2BE STA $AF ; Default Input Device (0) F2C0 RTS F2C1 iF2C1 LDX $AE ; No. of Open Files / Index to File Table F2C3 iF2C3 DEX F2C4 BMI $F2DC F2C6 CMP $0251,X ; KERNAL Table: Active Logical File No's. F2C9 BEQ $F2DC F2CB BNE $F2C3 F2CD iF2CD LDA $0251,X ; KERNAL Table: Active Logical File No's. F2D0 STA $D2 ; Current Logical File Number F2D2 LDA $025B,X ; KERNAL Table: Device No. for Each File F2D5 STA $D4 ; Current Device Number F2D7 LDA $0265,X ; KERNAL Table: Second Address Each File F2DA STA $D3 ; Current Secondary Address F2DC iF2DC RTS ; closet Perform [close] F2DD iF2DD JSR $F50D F2E0 LDA $D2 ; Current Logical File Number F2E2 iF2E2 JSR $F2C1 F2E5 BNE $F334 F2E7 iF2E7 JSR $F2CD F2EA TXA F2EB PHA F2EC LDA $D4 ; Current Device Number F2EE BEQ $F318 F2F0 CMP #$03 F2F2 BEQ $F318 F2F4 BCS $F315 F2F6 LDA $D3 ; Current Secondary Address F2F8 AND #$0F F2FA BEQ $F318 F2FC JSR $F695 ; - Get Buffer Address F2FF LDA #$00 F301 JSR $F278 F304 JSR $F8CB ; - Initiate Tape Write F307 LDA $D3 ; Current Secondary Address F309 CMP #$62 F30B BNE $F318 F30D LDA #$05 F30F JSR $F619 F312 JMP $F318 F315 iF315 JSR $F72F F318 iF318 PLA F319 TAX F31A DEC $AE ; No. of Open Files / Index to File Table F31C CPX $AE ; No. of Open Files / Index to File Table F31E BEQ $F334 F320 LDY $AE ; No. of Open Files / Index to File Table F322 LDA $0251,Y ; KERNAL Table: Active Logical File No's. F325 STA $0251,X ; KERNAL Table: Active Logical File No's. F328 LDA $025B,Y ; KERNAL Table: Device No. for Each File F32B STA $025B,X ; KERNAL Table: Device No. for Each File F32E LDA $0265,Y ; KERNAL Table: Second Address Each File F331 STA $0265,X ; KERNAL Table: Second Address Each File F334 iF334 RTS ; - -stop- F335 iF335 LDA $9B ; Flag: STOP key / RVS key F337 CMP #$EF F339 BNE $F342 F33B PHP F33C JSR $F2A6 ; clrchn Restore Default I/O F33F STA $9E ; No. of Chars. in Keyboard Buffer (Queue) F341 PLP F342 iF342 RTS ; stop Check STOP Key F343 iF343 JSR $F335 ; - -stop- F346 JMP $B7C6 ; stop Perform [stop], [end], break ; - Print Message if Direct F349 iF349 JSR $F351 ; Check Direct F34C BNE $F342 F34E JMP $F185 ; - Print Message ; Check Direct F351 iF351 LDA $78 F353 CMP #$02 F355 RTS F356 iF356 LDA $D4 ; Current Device Number F358 BNE $F35D F35A iF35A JMP $BF00 ; synerr Output ?SYNTAX Error F35D iF35D CMP #$03 F35F BEQ $F35A F361 BCC $F3D4 F363 LDA #$60 F365 STA $D3 ; Current Secondary Address F367 LDY $D1 ; Length of Current File Name F369 BNE $F36E F36B JMP $BF00 ; synerr Output ?SYNTAX Error F36E iF36E JSR $F449 F371 JSR $F4A5 F374 JSR $F0D2 ; talk Send TALK Command on IEEE Bus F377 LDA $D3 ; Current Secondary Address F379 JSR $F193 F37C JSR $F1C0 F37F STA $FB ; I/O Start Address F381 LDA $96 ; Kernal I/O Status Word: ST F383 LSR F384 LSR F385 BCS $F3C1 F387 JSR $F1C0 F38A STA $FC F38C JSR $F46D F38F iF38F LDA #$FD F391 AND $96 ; Kernal I/O Status Word: ST F393 STA $96 ; Kernal I/O Status Word: ST F395 JSR $F343 ; stop Check STOP Key F398 JSR $F1C0 F39B TAX F39C LDA $96 ; Kernal I/O Status Word: ST F39E LSR F39F LSR F3A0 BCS $F38F F3A2 TXA F3A3 LDY $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F3A5 BEQ $F3B3 F3A7 DEY F3A8 CMP ($FB),Y ; I/O Start Address F3AA BEQ $F3B5 F3AC LDA #$10 F3AE ORA $96 ; Kernal I/O Status Word: ST F3B0 STA $96 ; Kernal I/O Status Word: ST F3B2 BIT $FB91 ; *** F3B2: ADDRESS DIFFER. This may indicate misassembly *** F3B5 iF3B5 INC $FB ; I/O Start Address F3B7 BNE $F3BB F3B9 INC $FC F3BB iF3BB BIT $96 F3BD BVS $F3C6 F3BF BVC $F38F F3C1 iF3C1 LDY #$24 F3C3 JMP $F5AF F3C6 iF3C6 LDA $FB ; I/O Start Address F3C8 STA $C9 ; Tape End Addresses/End of Program F3CA LDA $FC F3CC STA $CA F3CE JSR $F1AE ; untlk Send UNTALK F3D1 JMP $F72F F3D4 iF3D4 JSR $F695 ; - Get Buffer Address F3D7 JSR $F857 ; - Print "PRESS PLAY ON TAPE" F3DA JSR $F449 F3DD iF3DD LDA $D1 ; Length of Current File Name F3DF BEQ $F3E9 F3E1 JSR $F4D3 F3E4 BNE $F3EE F3E6 iF3E6 JMP $F5AD F3E9 iF3E9 JSR $F5E5 F3EC BEQ $F3E6 F3EE iF3EE CPX #$01 F3F0 BNE $F3DD F3F2 LDA $96 ; Kernal I/O Status Word: ST F3F4 AND #$10 F3F6 BNE $F46C F3F8 JSR $F67B F3FB JSR $F46D F3FE JMP $F8A3 ; verfyt Perform [load] F401 iF401 LDA #$00 F403 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F405 iF405 JSR $F47D ; slpara Get Parameters For LOAD/SAVE F408 iF408 JSR $F6CC ; ? F40B LDA #$FF F40D iF40D CMP $9B ; Flag: STOP key / RVS key F40F BNE $F40D F411 CMP $9B ; Flag: STOP key / RVS key F413 BNE $F40D F415 JSR $F356 F418 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F41A BNE $F46C F41C JSR $F92B ; ? F41F LDA $96 ; Kernal I/O Status Word: ST F421 AND #$10 F423 BEQ $F42E F425 LDY #$00 F427 STY $9E ; No. of Chars. in Keyboard Buffer (Queue) F429 LDY #$60 F42B JMP $F5AF F42E iF42E LDY #$AE F430 JSR $F349 ; - Print Message if Direct F433 JSR $F351 ; Check Direct F436 BNE $F443 F438 LDA $CA F43A STA $2B F43C LDA $C9 ; Tape End Addresses/End of Program F43E STA $2A ; Pointer: Start of BASIC Variables F440 JMP $B4AD F443 iF443 JSR $B622 ; stxpt Reset TXTPTR F446 JMP $B60B F449 iF449 JSR $F351 ; Check Direct F44C BNE $F46C F44E LDY #$32 F450 JSR $F185 ; - Print Message F453 LDA $D1 ; Length of Current File Name F455 BEQ $F46C F457 LDY #$3D F459 JSR $F185 ; - Print Message F45C iF45C LDY $D1 ; Length of Current File Name F45E BEQ $F46C F460 LDY #$00 F462 iF462 LDA ($DA),Y ; Pointer: Current File Name F464 JSR $F266 ; chrout Output One Character F467 INY F468 CPY $D1 ; Length of Current File Name F46A BNE $F462 F46C iF46C RTS F46D iF46D LDY #$5F F46F LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F471 BEQ $F475 F473 LDY #$6D F475 iF475 JSR $F349 ; - Print Message if Direct F478 LDY #$39 F47A JMP $F349 ; - Print Message if Direct ; slpara Get Parameters For LOAD/SAVE F47D iF47D LDX #$00 F47F STX $96 ; Kernal I/O Status Word: ST F481 STX $D1 ; Length of Current File Name F483 STX $D3 ; Current Secondary Address F485 INX F486 STX $D4 ; Current Device Number F488 JSR $F54D ; ? F48B JSR $F53C F48E JSR $F54D ; ? F491 JSR $F49F ; combyt Get Next One Byte Parameter F494 STX $D4 ; Current Device Number F496 JSR $F54D ; ? F499 JSR $F49F ; combyt Get Next One Byte Parameter F49C STX $D3 ; Current Secondary Address F49E iF49E RTS ; combyt Get Next One Byte Parameter F49F iF49F JSR $F555 ; cmmerr Check For Comma F4A2 JMP $C8D4 ; -Eval Byte Parameter F4A5 iF4A5 LDA $D3 ; Current Secondary Address F4A7 BMI $F49E F4A9 LDY $D1 ; Length of Current File Name F4AB BEQ $F49E F4AD JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus F4B0 LDA $D3 ; Current Secondary Address F4B2 ORA #$F0 F4B4 iF4B4 JSR $F143 F4B7 LDA $96 ; Kernal I/O Status Word: ST F4B9 BPL $F4C0 F4BB iF4BB LDY #$74 F4BD JMP $F5AF F4C0 iF4C0 LDA $D1 ; Length of Current File Name F4C2 BEQ $F4D0 F4C4 LDY #$00 F4C6 iF4C6 LDA ($DA),Y ; Pointer: Current File Name F4C8 JSR $F19E F4CB INY F4CC CPY $D1 ; Length of Current File Name F4CE BNE $F4C6 F4D0 iF4D0 JMP $F1B9 ; untlk Send UNLISTEN F4D3 iF4D3 JSR $F5E5 F4D6 BEQ $F4F5 F4D8 LDY #$05 F4DA STY $B5 F4DC LDY #$00 F4DE STY $B4 F4E0 iF4E0 CPY $D1 ; Length of Current File Name F4E2 BEQ $F4F4 F4E4 LDA ($DA),Y ; Pointer: Current File Name F4E6 LDY $B5 F4E8 CMP ($D6),Y ; Pointer: Start of Tape Buffer F4EA BNE $F4D3 F4EC INC $B4 F4EE INC $B5 F4F0 LDY $B4 F4F2 BNE $F4E0 F4F4 iF4F4 TYA F4F5 iF4F5 RTS ; verfyt Perform [verify] F4F6 iF4F6 LDA #$01 F4F8 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F4FA JSR $F405 F4FD LDA $96 ; Kernal I/O Status Word: ST F4FF AND #$10 F501 BEQ $F508 F503 LDY #$6E F505 JMP $F5AF F508 iF508 LDY #$AA F50A JMP $F185 ; - Print Message F50D iF50D LDX #$00 F50F STX $D3 ; Current Secondary Address F511 STX $96 ; Kernal I/O Status Word: ST F513 STX $D1 ; Length of Current File Name F515 INX F516 STX $D4 ; Current Device Number F518 JSR $F558 F51B JSR $C8D4 ; -Eval Byte Parameter F51E STX $D2 ; Current Logical File Number F520 JSR $F54D ; ? F523 JSR $F49F ; combyt Get Next One Byte Parameter F526 STX $D4 ; Current Device Number F528 CPX #$03 F52A BCC $F52E F52C DEC $D3 ; Current Secondary Address F52E iF52E JSR $F54D ; ? F531 JSR $F49F ; combyt Get Next One Byte Parameter F534 STX $D3 ; Current Secondary Address F536 JSR $F54D ; ? F539 JSR $F555 ; cmmerr Check For Comma F53C iF53C JSR $BD98 ; frmevl Evaluate Expression in Text F53F JSR $C7B5 ; frestr Perform String Housekeeping F542 STA $D1 ; Length of Current File Name F544 LDA $1F ; Utility Pointer Area F546 STA $DA ; Pointer: Current File Name F548 LDA $20 F54A STA $DB F54C RTS ; ? F54D iF54D JSR $0076 ; Entry to Get Same Byte of Text Again F550 BNE $F554 F552 PLA F553 PLA F554 iF554 RTS ; cmmerr Check For Comma F555 iF555 JSR $BEF5 ; -Test comma- F558 iF558 JSR $0076 ; Entry to Get Same Byte of Text Again F55B BNE $F554 F55D iF55D JMP $BF00 ; synerr Output ?SYNTAX Error ; opent Perform [open] F560 iF560 JSR $F50D F563 iF563 LDA $D2 ; Current Logical File Number F565 iF565 BEQ $F55D F567 LDY #$0E F569 JSR $F2C1 F56C BEQ $F5AF F56E LDX $AE ; No. of Open Files / Index to File Table F570 LDY #$00 F572 STY $96 ; Kernal I/O Status Word: ST F574 CPX #$0A F576 BEQ $F5AF F578 INC $AE ; No. of Open Files / Index to File Table F57A LDA $D2 ; Current Logical File Number F57C STA $0251,X ; KERNAL Table: Active Logical File No's. F57F LDA $D3 ; Current Secondary Address F581 ORA #$60 F583 STA $D3 ; Current Secondary Address F585 STA $0265,X ; KERNAL Table: Second Address Each File F588 LDA $D4 ; Current Device Number F58A STA $025B,X ; KERNAL Table: Device No. for Each File F58D BEQ $F5E4 F58F CMP #$03 F591 BEQ $F5E4 F593 BCC $F598 F595 JMP $F4A5 F598 iF598 LDA $D3 ; Current Secondary Address F59A AND #$0F F59C BNE $F5C9 F59E JSR $F857 ; - Print "PRESS PLAY ON TAPE" F5A1 JSR $F449 F5A4 LDA $D1 ; Length of Current File Name F5A6 BEQ $F5C2 F5A8 JSR $F4D3 F5AB BNE $F5D1 F5AD iF5AD LDY #$24 F5AF iF5AF JSR $F2A2 ; clall Abort All Files F5B2 LDA #$0D F5B4 JSR $F266 ; chrout Output One Character F5B7 LDA #$3F F5B9 JSR $F266 ; chrout Output One Character F5BC JSR $F185 ; - Print Message F5BF JMP $B3ED F5C2 iF5C2 JSR $F5E5 F5C5 BEQ $F5AD F5C7 BNE $F5D1 F5C9 iF5C9 JSR $F88C ; - Print "PRESS PLAY & RECORD..." F5CC LDA #$04 F5CE JSR $F619 F5D1 iF5D1 LDX $D4 ; Current Device Number F5D3 LDA #$BF F5D5 LDY $D3 ; Current Secondary Address F5D7 CPY #$60 F5D9 BEQ $F5E2 F5DB LDY #$00 F5DD LDA #$02 F5DF STA ($D6),Y ; Pointer: Start of Tape Buffer F5E1 TYA F5E2 iF5E2 STA $BA,X F5E4 iF5E4 RTS F5E5 iF5E5 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F5E7 PHA F5E8 iF5E8 JSR $F89A ; - Initiate Tape Read F5EB LDY #$00 F5ED LDA ($D6),Y ; Pointer: Start of Tape Buffer F5EF CMP #$05 F5F1 BEQ $F614 F5F3 CMP #$01 F5F5 BEQ $F5FB F5F7 CMP #$04 F5F9 BNE $F5E8 F5FB iF5FB TAX F5FC JSR $F351 ; Check Direct F5FF BNE $F612 F601 LDY #$A3 F603 JSR $F185 ; - Print Message F606 LDY #$05 F608 iF608 LDA ($D6),Y ; Pointer: Start of Tape Buffer F60A JSR $FFD2 ; chrout Output Vector, chrout F60D INY F60E CPY #$15 F610 BNE $F608 F612 iF612 LDY #$01 F614 iF614 PLA F615 STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F617 TYA F618 RTS F619 iF619 STA $B4 F61B JSR $F695 ; - Get Buffer Address F61E LDA $FC F620 PHA F621 LDA $FB ; I/O Start Address F623 PHA F624 LDA $CA F626 PHA F627 LDA $C9 ; Tape End Addresses/End of Program F629 PHA F62A LDY #$BF F62C LDA #$20 F62E iF62E STA ($D6),Y ; Pointer: Start of Tape Buffer F630 DEY F631 BNE $F62E F633 LDA $B4 F635 STA ($D6),Y ; Pointer: Start of Tape Buffer F637 INY F638 LDA $FB ; I/O Start Address F63A STA ($D6),Y ; Pointer: Start of Tape Buffer F63C INY F63D LDA $FC F63F STA ($D6),Y ; Pointer: Start of Tape Buffer F641 INY F642 LDA $C9 ; Tape End Addresses/End of Program F644 STA ($D6),Y ; Pointer: Start of Tape Buffer F646 INY F647 LDA $CA F649 STA ($D6),Y ; Pointer: Start of Tape Buffer F64B INY F64C STY $B5 F64E LDY #$00 F650 STY $B4 F652 iF652 LDY $B4 F654 CPY $D1 ; Length of Current File Name F656 BEQ $F664 F658 LDA ($DA),Y ; Pointer: Current File Name F65A LDY $B5 F65C STA ($D6),Y ; Pointer: Start of Tape Buffer F65E INC $B4 F660 INC $B5 F662 BNE $F652 F664 iF664 JSR $F6AB ; - Set Buffer Stat / End Pointers F667 LDA #$69 F669 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum F66B JSR $F8D5 F66E PLA F66F STA $C9 ; Tape End Addresses/End of Program F671 PLA F672 STA $CA F674 PLA F675 STA $FB ; I/O Start Address F677 PLA F678 STA $FC F67A RTS F67B iF67B JSR $F92B ; ? F67E LDX #$00 F680 LDY #$01 F682 iF682 LDA ($D6),Y ; Pointer: Start of Tape Buffer F684 STA $C7,X ; Pointer: Tape Buffer/ Screen Scrolling F686 INX F687 INY F688 CPX #$04 F68A BNE $F682 F68C LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling F68E STA $FB ; I/O Start Address F690 LDA $C8 F692 STA $FC F694 RTS ; - Get Buffer Address F695 iF695 LDA #$7A F697 STA $D6 ; Pointer: Start of Tape Buffer F699 LDA #$02 F69B STA $D7 F69D LDA $D4 ; Current Device Number F69F LSR F6A0 BCS $F6AA F6A2 LDA #$3A F6A4 STA $D6 ; Pointer: Start of Tape Buffer F6A6 LDA #$03 F6A8 STA $D7 F6AA iF6AA RTS ; - Set Buffer Stat / End Pointers F6AB iF6AB JSR $F92B ; ? F6AE JSR $F695 ; - Get Buffer Address F6B1 LDA $D6 ; Pointer: Start of Tape Buffer F6B3 STA $FB ; I/O Start Address F6B5 CLC F6B6 ADC #$C0 F6B8 STA $C9 ; Tape End Addresses/End of Program F6BA LDA $D7 F6BC STA $FC F6BE ADC #$00 F6C0 STA $CA F6C2 RTS ; syst Perform [sys] F6C3 iF6C3 JSR $BD84 ; frmnum Confirm Result F6C6 JSR $C92D ; getadr Convert FAC#1 to Integer in LINNUM F6C9 JMP ($0011) ; Temp: Integer Value ; ? F6CC iF6CC LDA $2A ; Pointer: Start of BASIC Variables F6CE STA $C9 ; Tape End Addresses/End of Program F6D0 LDA $2B F6D2 STA $CA F6D4 LDA $29 F6D6 STA $FC F6D8 LDA $28 ; Pointer: Start of BASIC Text [0401] F6DA STA $FB ; I/O Start Address F6DC RTS ; savet Perform [save] F6DD iF6DD JSR $F47D ; slpara Get Parameters For LOAD/SAVE F6E0 iF6E0 JSR $F6CC ; ? F6E3 iF6E3 LDA $D4 ; Current Device Number F6E5 BNE $F6EC F6E7 iF6E7 LDY #$74 F6E9 JMP $F5AF F6EC iF6EC CMP #$03 F6EE BEQ $F6E7 F6F0 BCC $F742 F6F2 LDA #$61 F6F4 STA $D3 ; Current Secondary Address F6F6 LDY $D1 ; Length of Current File Name F6F8 BNE $F6FD F6FA JMP $BF00 ; synerr Output ?SYNTAX Error F6FD iF6FD JSR $F4A5 F700 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus F703 LDA $D3 ; Current Secondary Address F705 JSR $F143 F708 LDY #$00 F70A JSR $FBBB ; - Reset Tape Pointer F70D LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling F70F JSR $F19E F712 LDA $C8 F714 JSR $F19E F717 iF717 JSR $FD0B F71A BEQ $F72C F71C LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling F71E JSR $F19E F721 JSR $F343 ; stop Check STOP Key F724 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling F726 BNE $F717 F728 INC $C8 F72A BNE $F717 F72C iF72C JSR $F1B9 ; untlk Send UNLISTEN F72F iF72F BIT $D3 F731 BMI $F7AB F733 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus F736 LDA $D3 ; Current Secondary Address F738 AND #$EF F73A ORA #$E0 F73C JSR $F143 F73F JMP $F1B9 ; untlk Send UNLISTEN F742 iF742 JSR $F695 ; - Get Buffer Address F745 JSR $F88C ; - Print "PRESS PLAY & RECORD..." F748 JSR $F351 ; Check Direct F74B BNE $F755 F74D LDY #$64 F74F JSR $F185 ; - Print Message F752 JSR $F45C F755 iF755 LDA #$01 F757 JSR $F619 F75A JSR $F8CE F75D LDA $D3 ; Current Secondary Address F75F AND #$02 F761 BEQ $F7AB F763 LDA #$05 F765 JMP $F619 ; Update Jiffy Clock F768 iF768 INC $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time F76A LDA $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time F76C BNE $F770 F76E INC $9A F770 iF770 CMP #$6F F772 BNE $F77A F774 LDA $9A F776 CMP #$02 F778 BEQ $F79B F77A iF77A INC $8F F77C BNE $F784 F77E INC $8E F780 BNE $F784 F782 INC $8D ; Real-Time Jiffy Clock (approx) 1/60 Sec F784 iF784 LDX #$00 F786 iF786 LDA $8D,X ; Real-Time Jiffy Clock (approx) 1/60 Sec F788 CMP $F7AC,X ; ? DATA F78B BCC $F7A1 F78D INX F78E CPX #$03 F790 BNE $F786 F792 LDA #$00 F794 iF794 STA $8C,X F796 DEX F797 BNE $F794 F799 BEQ $F7A1 F79B iF79B LDA #$00 F79D STA $99 ; Jiffy clock correction: 623rd 1/60 sec does not increment time F79F STA $9A F7A1 iF7A1 LDA $E812 F7A4 CMP $E812 F7A7 BNE $F7A1 F7A9 STA $9B ; Flag: STOP key / RVS key F7AB iF7AB RTS ; ? DATA F7AC sF7AC .byte 4F 1A 01 ;o.. ; chkin Set Input Device F7AF iF7AF PHA F7B0 TXA F7B1 PHA F7B2 TYA F7B3 PHA F7B4 LDA #$00 F7B6 STA $96 ; Kernal I/O Status Word: ST F7B8 TXA F7B9 JSR $F2C1 F7BC BEQ $F7C3 F7BE iF7BE LDY #$17 F7C0 iF7C0 JMP $F5AF F7C3 iF7C3 JSR $F2CD F7C6 LDA $D4 ; Current Device Number F7C8 BEQ $F7DA F7CA CMP #$03 F7CC BEQ $F7DA F7CE BCS $F7DF F7D0 LDX $D3 ; Current Secondary Address F7D2 CPX #$60 F7D4 BEQ $F7DA F7D6 LDY #$86 F7D8 BNE $F7C0 F7DA iF7DA STA $AF ; Default Input Device (0) F7DC JMP $F29C F7DF iF7DF PHA F7E0 JSR $DBE1 ; ? F7E3 JSR $F0D2 ; talk Send TALK Command on IEEE Bus F7E6 LDA $D3 ; Current Secondary Address F7E8 BPL $F7F0 F7EA JSR $F198 F7ED JMP $F7F3 F7F0 iF7F0 JSR $F193 F7F3 iF7F3 LDA $96 ; Kernal I/O Status Word: ST F7F5 BPL $F7FA F7F7 JMP $F4BB F7FA iF7FA PLA F7FB JMP $F7DA ; chkout Set Output Device F7FE iF7FE PHA F7FF TXA F800 PHA F801 TYA F802 PHA F803 LDA #$00 F805 STA $96 ; Kernal I/O Status Word: ST F807 TXA F808 JSR $F2C1 F80B BNE $F7BE F80D JSR $F2CD F810 LDA $D4 ; Current Device Number F812 BNE $F818 F814 LDY #$94 F816 BNE $F7C0 F818 iF818 CMP #$03 F81A BEQ $F828 F81C BCS $F82D F81E LDX $D3 ; Current Secondary Address F820 CPX #$60 F822 BNE $F828 F824 LDY #$94 F826 BNE $F7C0 F828 iF828 STA $B0 ; Default Output (CMD) Device (3) F82A JMP $F29C F82D iF82D PHA F82E JSR $DBE1 ; ? F831 JSR $F0D5 ; listn Send LISTEN Command on IEEE Bus F834 LDA $D3 ; Current Secondary Address F836 BPL $F83D F838 JSR $F148 F83B BNE $F840 F83D iF83D JSR $F143 F840 iF840 LDA $96 ; Kernal I/O Status Word: ST F842 BPL $F847 F844 JMP $F4BB F847 iF847 PLA F848 JMP $F828 ; - Bump Tape Pointer F84B iF84B JSR $F695 ; - Get Buffer Address F84E LDX $D4 ; Current Device Number F850 INC $BA,X F852 LDY $BA,X F854 CPY #$C0 F856 RTS ; - Print "PRESS PLAY ON TAPE" F857 iF857 JSR $F87A ; - Check Tape Status F85A BEQ $F88B F85C LDY #$41 F85E iF85E JSR $F185 ; - Print Message F861 LDY #$56 F863 JSR $F185 ; - Print Message F866 LDA $D4 ; Current Device Number F868 ORA #$30 F86A JSR $E202 ; - Output to Screen F86D iF86D JSR $F935 F870 JSR $F87A ; - Check Tape Status F873 BNE $F86D F875 LDY #$AA F877 JMP $F185 ; - Print Message ; - Check Tape Status F87A iF87A LDA #$10 F87C LDX $D4 ; Current Device Number F87E DEX F87F BEQ $F883 F881 LDA #$20 F883 iF883 BIT $E810 F886 BNE $F88B F888 BIT $E810 F88B iF88B RTS ; - Print "PRESS PLAY & RECORD..." F88C iF88C JSR $F87A ; - Check Tape Status F88F BEQ $F88B F891 LDY #$41 F893 JSR $F185 ; - Print Message F896 LDY #$4D F898 BNE $F85E ; - Initiate Tape Read F89A iF89A LDA #$00 F89C STA $96 ; Kernal I/O Status Word: ST F89E STA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) F8A0 JSR $F6AB ; - Set Buffer Stat / End Pointers F8A3 iF8A3 JSR $F92B ; ? F8A6 JSR $F857 ; - Print "PRESS PLAY ON TAPE" F8A9 SEI F8AA LDA #$00 F8AC STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker F8AE STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 F8B0 STA $CB ; Tape Timing Constants F8B2 STA $C0 ; Index to Cassette File name/Header ID for Tape write. F8B4 STA $C1 ; Tape Pass 2 Error Log F8B6 STA $B2 ; Flag: Tape Byte-Received F8B8 LDX $D4 ; Current Device Number F8BA DEX F8BB BEQ $F8C4 F8BD LDA #$90 F8BF STA $E84E F8C2 BNE $F8C7 F8C4 iF8C4 INC $E811 F8C7 iF8C7 LDX #$0E F8C9 BNE $F8E0 ; - Common Tape Code ; - Initiate Tape Write F8CB iF8CB JSR $F6AB ; - Set Buffer Stat / End Pointers F8CE iF8CE JSR $F92B ; ? F8D1 LDA #$14 F8D3 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum F8D5 iF8D5 JSR $F88C ; - Print "PRESS PLAY & RECORD..." F8D8 SEI F8D9 LDA #$A0 F8DB STA $E84E F8DE LDX #$08 ; - Common Tape Code F8E0 iF8E0 JSR $FCE0 ; - Set IRQ Vector F8E3 LDA #$02 F8E5 STA $DE ; Cassette Read / Write Block Count F8E7 JSR $FBC9 ; - New Character Setup F8EA DEC $E813 F8ED LDX $D4 ; Current Device Number F8EF DEX F8F0 BNE $F8FB F8F2 LDA #$34 F8F4 STA $E813 F8F7 STA $F9 ; Tape Motor Interlock #1 F8F9 BNE $F905 F8FB iF8FB LDA $E840 ; VIA CHIP F8FE STX $FA ; Tape Motor Interlock #2 F900 AND #$EF F902 STA $E840 ; VIA CHIP F905 iF905 LDX #$FF F907 iF907 LDY #$FF F909 iF909 DEY F90A BNE $F909 F90C DEX F90D BNE $F907 F90F STA $E849 F912 CLI ; - Wait For Tape F913 iF913 LDA #$E4 F915 CMP $91 F917 BEQ $F92A F919 JSR $F935 F91C BIT $E813 F91F BPL $F913 ; - Wait For Tape F921 BIT $E812 F924 JSR $F768 ; Update Jiffy Clock F927 JMP $F913 ; - Wait For Tape F92A iF92A RTS ; ? F92B iF92B JSR $F935 F92E LDA #$E4 F930 CMP $91 F932 BNE $F92B ; ? F934 RTS F935 iF935 JSR $F335 ; - -stop- F938 BNE $F942 F93A JSR $FCC0 ; - Wind Up Tape I/O F93D JSR $F2B8 F940 STA $10 ; 3: width of source (unused - from TTY) F942 iF942 JMP $B7C6 ; stop Perform [stop], [end], break F945 iF945 STX $CC F947 LDA $CB ; Tape Timing Constants F949 ASL F94A ASL F94B CLC F94C ADC $CB ; Tape Timing Constants F94E CLC F94F ADC $CC F951 STA $CC F953 LDA #$00 F955 BIT $CB F957 BMI $F95A F959 ROL F95A iF95A ASL $CC F95C ROL F95D ASL $CC F95F ROL F960 TAX F961 iF961 LDA $E848 F964 CMP #$15 F966 BCC $F961 F968 ADC $CC F96A STA $E844 F96D TXA F96E ADC $E849 F971 STA $E845 F974 CLI F975 RTS ; - Read Tape Bits F976 iF976 LDX $E849 F979 LDY #$FF F97B TYA F97C SBC $E848 F97F CPX $E849 F982 BNE $F976 ; - Read Tape Bits F984 STX $CC F986 TAX F987 STY $E848 F98A STY $E849 F98D TYA F98E SBC $CC F990 STX $CC F992 LSR F993 ROR $CC F995 LSR F996 ROR $CC F998 LDA $CB ; Tape Timing Constants F99A CLC F99B ADC #$3C F99D BIT $E840 F9A0 BIT $E810 F9A3 CMP $CC F9A5 BCS $F9F1 F9A7 LDX $B2 ; Flag: Tape Byte-Received F9A9 BEQ $F9AE F9AB JMP $FA9C ; - Store Tape Characters F9AE iF9AE LDX $B7 ; Temp Data Area (64=00A3) F9B0 BMI $F9CD F9B2 LDX #$00 F9B4 ADC #$30 F9B6 ADC $CB ; Tape Timing Constants F9B8 CMP $CC F9BA BCS $F9D8 F9BC INX F9BD ADC #$26 F9BF ADC $CB ; Tape Timing Constants F9C1 CMP $CC F9C3 BCS $F9DC F9C5 ADC #$2C F9C7 ADC $CB ; Tape Timing Constants F9C9 CMP $CC F9CB BCC $F9D0 F9CD iF9CD JMP $FA4C F9D0 iF9D0 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 F9D2 BEQ $F9F1 F9D4 STA $BE ; Cassette Temp (64=00A8) F9D6 BNE $F9F1 F9D8 iF9D8 INC $BF ; RS-232 Flag: Check for Start Bit (64=00A9) F9DA BCS $F9DE F9DC iF9DC DEC $BF ; RS-232 Flag: Check for Start Bit (64=00A9) F9DE iF9DE SEC F9DF SBC #$13 F9E1 SBC $CC F9E3 ADC $9C ; Timing Constant for Tape F9E5 STA $9C ; Timing Constant for Tape F9E7 LDA $B9 ; Temp Data Area (64=00A4) F9E9 EOR #$01 F9EB STA $B9 ; Temp Data Area (64=00A4) F9ED BEQ $FA10 F9EF STX $D9 ; Current Character to Print F9F1 iF9F1 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 F9F3 BEQ $FA0D F9F5 BIT $E84D F9F8 BVC $FA0D F9FA LDA #$00 F9FC STA $B9 ; Temp Data Area (64=00A4) F9FE LDA $B7 ; Temp Data Area (64=00A3) FA00 BPL $FA33 FA02 BMI $F9CD FA04 iFA04 LDX #$A6 FA06 JSR $F945 FA09 LDA $B1 ; Tape Character Parity FA0B BNE $F9D0 FA0D iFA0D JMP $E600 ; - Return From Interrupt FA10 iFA10 LDA $9C ; Timing Constant for Tape FA12 BEQ $FA1C FA14 BMI $FA1A FA16 DEC $CB ; Tape Timing Constants FA18 DEC $CB ; Tape Timing Constants FA1A iFA1A INC $CB ; Tape Timing Constants FA1C iFA1C LDA #$00 FA1E STA $9C ; Timing Constant for Tape FA20 CPX $D9 ; Current Character to Print FA22 BNE $FA33 FA24 TXA FA25 BNE $F9D0 FA27 LDA $BF ; RS-232 Flag: Check for Start Bit (64=00A9) FA29 BMI $F9F1 FA2B CMP #$10 FA2D BCC $F9F1 FA2F STA $AB ; Cassette Sync No. (64=0096) FA31 BCS $F9F1 FA33 iFA33 TXA FA34 EOR $B1 ; Tape Character Parity FA36 STA $B1 ; Tape Character Parity FA38 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 FA3A BEQ $FA0D FA3C DEC $B7 ; Temp Data Area (64=00A3) FA3E BMI $FA04 FA40 LSR $D9 ; Current Character to Print FA42 ROR $DF ; IEEE Word Buffer FA44 LDX #$DA FA46 JSR $F945 FA49 JMP $E600 ; - Return From Interrupt FA4C iFA4C LDA $AB ; Cassette Sync No. (64=0096) FA4E BEQ $FA54 FA50 LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 FA52 BEQ $FA5B FA54 iFA54 LDA $B7 ; Temp Data Area (64=00A3) FA56 BMI $FA5B FA58 JMP $F9DC FA5B iFA5B LSR $CC FA5D LDA #$93 FA5F SEC FA60 SBC $CC FA62 ADC $CB ; Tape Timing Constants FA64 ASL FA65 TAX FA66 JSR $F945 FA69 INC $B2 ; Flag: Tape Byte-Received FA6B LDA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 FA6D BNE $FA80 FA6F LDA $AB ; Cassette Sync No. (64=0096) FA71 BEQ $FA99 FA73 STA $BE ; Cassette Temp (64=00A8) FA75 LDA #$00 FA77 STA $AB ; Cassette Sync No. (64=0096) FA79 LDA #$C0 FA7B STA $E84E FA7E STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 FA80 iFA80 LDA $AB ; Cassette Sync No. (64=0096) FA82 STA $CF ; End of tape read FA84 BEQ $FA8F FA86 LDA #$00 FA88 STA $CE ; Cassette Temp (64=00B4): Tape read timer flag =IRQ enabled for Timer 1 FA8A LDA #$40 FA8C STA $E84E FA8F iFA8F LDA $DF ; IEEE Word Buffer FA91 STA $DD ; Cassette Temp FA93 LDA $BE ; Cassette Temp (64=00A8) FA95 ORA $BF ; RS-232 Flag: Check for Start Bit (64=00A9) FA97 STA $D0 ; Read character error FA99 iFA99 JMP $E600 ; - Return From Interrupt ; - Store Tape Characters FA9C iFA9C JSR $FBC9 ; - New Character Setup FA9F STA $B2 ; Flag: Tape Byte-Received FAA1 LDX #$DA FAA3 JSR $F945 FAA6 LDA $DE ; Cassette Read / Write Block Count FAA8 BEQ $FAAC FAAA STA $BD ; Cassette Temp (64=00A7) FAAC iFAAC LDA #$0F FAAE BIT $C2 FAB0 BPL $FAC9 FAB2 LDA $CF ; End of tape read FAB4 BNE $FAC2 FAB6 LDX $DE ; Cassette Read / Write Block Count FAB8 DEX FAB9 BNE $FAC6 FABB LDA #$08 FABD JSR $FBC4 ; - Set Status Bit FAC0 BNE $FAC6 FAC2 iFAC2 LDA #$00 FAC4 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FAC6 iFAC6 JMP $E600 ; - Return From Interrupt FAC9 iFAC9 BVS $FAFC FACB BNE $FAE5 FACD LDA $CF ; End of tape read FACF BNE $FAC6 FAD1 LDA $D0 ; Read character error FAD3 BNE $FAC6 FAD5 LDA $BD ; Cassette Temp (64=00A7) FAD7 LSR FAD8 LDA $DD ; Cassette Temp FADA BMI $FADF FADC BCC $FAF6 FADE CLC FADF iFADF BCS $FAF6 FAE1 AND #$0F FAE3 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FAE5 iFAE5 DEC $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FAE7 BNE $FAC6 FAE9 LDA #$40 FAEB STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FAED JSR $FBBB ; - Reset Tape Pointer FAF0 LDA #$00 FAF2 STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FAF4 BEQ $FAC6 FAF6 iFAF6 LDA #$80 FAF8 STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FAFA BNE $FAC6 FAFC iFAFC LDA $CF ; End of tape read FAFE BEQ $FB0A FB00 LDA #$04 FB02 JSR $FBC4 ; - Set Status Bit FB05 LDA #$00 FB07 JMP $FB8B FB0A iFB0A JSR $FD0B FB0D BNE $FB12 FB0F JMP $FB89 FB12 iFB12 LDX $BD ; Cassette Temp (64=00A7) FB14 DEX FB15 BEQ $FB44 FB17 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) FB19 BEQ $FB27 FB1B LDY #$00 FB1D LDA $DD ; Cassette Temp FB1F CMP ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling FB21 BEQ $FB27 FB23 LDA #$01 FB25 STA $D0 ; Read character error FB27 iFB27 LDA $D0 ; Read character error FB29 BEQ $FB77 FB2B LDX #$3D FB2D CPX $C0 ; Index to Cassette File name/Header ID for Tape write. FB2F BCC $FB70 FB31 LDX $C0 ; Index to Cassette File name/Header ID for Tape write. FB33 LDA $C8 FB35 STA $0101,X FB38 LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling FB3A STA $0100,X ; Micro-Processor System Stack Area FB3D INX FB3E INX FB3F STX $C0 ; Index to Cassette File name/Header ID for Tape write. FB41 JMP $FB77 FB44 iFB44 LDX $C1 ; Tape Pass 2 Error Log FB46 CPX $C0 ; Index to Cassette File name/Header ID for Tape write. FB48 BEQ $FB81 FB4A LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling FB4C CMP $0100,X ; Micro-Processor System Stack Area FB4F BNE $FB81 FB51 LDA $C8 FB53 CMP $0101,X FB56 BNE $FB81 FB58 INC $C1 ; Tape Pass 2 Error Log FB5A INC $C1 ; Tape Pass 2 Error Log FB5C LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) FB5E BEQ $FB6C FB60 LDA $DD ; Cassette Temp FB62 LDY #$00 FB64 CMP ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling FB66 BEQ $FB81 FB68 LDA #$01 FB6A STA $D0 ; Read character error FB6C iFB6C LDA $D0 ; Read character error FB6E BEQ $FB77 FB70 iFB70 LDA #$10 FB72 JSR $FBC4 ; - Set Status Bit FB75 BNE $FB81 FB77 iFB77 LDA $9D ; Flag: 0 = Load, 1 = Verify (Kernel) FB79 BNE $FB81 FB7B LDA $DD ; Cassette Temp FB7D LDY #$00 FB7F STA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling FB81 iFB81 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling FB83 BNE $FBB8 FB85 INC $C8 FB87 BNE $FBB8 FB89 iFB89 LDA #$80 FB8B iFB8B STA $C2 ; Cassette Temp (64=00AA) read flags: 0=scan, 15=count, $40=load, $80=end of tape marker FB8D LDX $DE ; Cassette Read / Write Block Count FB8F DEX FB90 BMI $FB94 FB92 STX $DE ; Cassette Read / Write Block Count FB94 iFB94 DEC $BD ; Cassette Temp (64=00A7) FB96 BEQ $FBA0 FB98 LDA $C0 ; Index to Cassette File name/Header ID for Tape write. FB9A BNE $FBB8 FB9C STA $DE ; Cassette Read / Write Block Count FB9E BEQ $FBB8 FBA0 iFBA0 JSR $FCC0 ; - Wind Up Tape I/O FBA3 JSR $FBBB ; - Reset Tape Pointer FBA6 LDY #$00 FBA8 STY $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FBAA JSR $FCF9 FBAD LDA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FBAF EOR $DD ; Cassette Temp FBB1 BEQ $FBB8 FBB3 LDA #$20 FBB5 JSR $FBC4 ; - Set Status Bit FBB8 iFBB8 JMP $E600 ; - Return From Interrupt ; - Reset Tape Pointer FBBB iFBBB LDA $FC FBBD STA $C8 FBBF LDA $FB ; I/O Start Address FBC1 STA $C7 ; Pointer: Tape Buffer/ Screen Scrolling FBC3 RTS ; - Set Status Bit FBC4 iFBC4 ORA $96 ; Kernal I/O Status Word: ST FBC6 STA $96 ; Kernal I/O Status Word: ST FBC8 RTS ; - New Character Setup FBC9 iFBC9 LDA #$08 FBCB STA $B7 ; Temp Data Area (64=00A3) FBCD LDA #$00 FBCF STA $B9 ; Temp Data Area (64=00A4) FBD1 STA $BE ; Cassette Temp (64=00A8) FBD3 STA $B1 ; Tape Character Parity FBD5 STA $BF ; RS-232 Flag: Check for Start Bit (64=00A9) FBD7 RTS ; - Write Transition to Tape FBD8 iFBD8 LDA $DD ; Cassette Temp FBDA LSR FBDB LDA #$60 FBDD BCC $FBE1 FBDF iFBDF LDA #$B0 FBE1 iFBE1 LDX #$00 FBE3 iFBE3 STA $E848 FBE6 STX $E849 FBE9 LDA $E840 ; VIA CHIP FBEC EOR #$08 FBEE STA $E840 ; VIA CHIP FBF1 AND #$08 FBF3 RTS ; - Write Data to Tape FBF4 iFBF4 SEC FBF5 ROR $C8 FBF7 BMI $FC35 ; - IRQ Entry Point FBF9 LDA $BE ; Cassette Temp (64=00A8) FBFB BNE $FC0F FBFD LDA #$10 FBFF LDX #$01 FC01 JSR $FBE3 FC04 BNE $FC35 FC06 INC $BE ; Cassette Temp (64=00A8) FC08 LDA $C8 FC0A BPL $FC35 FC0C JMP $FC86 FC0F iFC0F LDA $BF ; RS-232 Flag: Check for Start Bit (64=00A9) FC11 BNE $FC1C FC13 JSR $FBDF FC16 BNE $FC35 FC18 INC $BF ; RS-232 Flag: Check for Start Bit (64=00A9) FC1A BNE $FC35 FC1C iFC1C JSR $FBD8 ; - Write Transition to Tape FC1F BNE $FC35 FC21 LDA $B9 ; Temp Data Area (64=00A4) FC23 EOR #$01 FC25 STA $B9 ; Temp Data Area (64=00A4) FC27 BEQ $FC38 FC29 LDA $DD ; Cassette Temp FC2B EOR #$01 FC2D STA $DD ; Cassette Temp FC2F AND #$01 FC31 EOR $B1 ; Tape Character Parity FC33 STA $B1 ; Tape Character Parity FC35 iFC35 JMP $E600 ; - Return From Interrupt FC38 iFC38 LSR $DD ; Cassette Temp FC3A DEC $B7 ; Temp Data Area (64=00A3) FC3C LDA $B7 ; Temp Data Area (64=00A3) FC3E BEQ $FC7D FC40 BPL $FC35 FC42 iFC42 JSR $FBC9 ; - New Character Setup FC45 CLI FC46 LDA $BA FC48 BEQ $FC5C FC4A LDX #$00 FC4C STX $D9 ; Current Character to Print FC4E DEC $BA FC50 LDX $DE ; Cassette Read / Write Block Count FC52 CPX #$02 FC54 BNE $FC58 FC56 ORA #$80 FC58 iFC58 STA $DD ; Cassette Temp FC5A BNE $FC35 FC5C iFC5C JSR $FD0B FC5F BCC $FC6B FC61 BNE $FBF4 ; - Write Data to Tape FC63 INC $C8 FC65 LDA $D9 ; Current Character to Print FC67 STA $DD ; Cassette Temp FC69 BCS $FC35 FC6B iFC6B LDY #$00 FC6D LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling FC6F STA $DD ; Cassette Temp FC71 EOR $D9 ; Current Character to Print FC73 STA $D9 ; Current Character to Print FC75 INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling FC77 BNE $FC35 FC79 INC $C8 FC7B BNE $FC35 FC7D iFC7D LDA $B1 ; Tape Character Parity FC7F EOR #$01 FC81 STA $DD ; Cassette Temp FC83 iFC83 JMP $E600 ; - Return From Interrupt FC86 iFC86 DEC $DE ; Cassette Read / Write Block Count FC88 BNE $FC8D FC8A JSR $FCEB ; - Kill Tape Motor FC8D iFC8D LDA #$50 FC8F STA $BD ; Cassette Temp (64=00A7) FC91 LDX #$08 FC93 SEI FC94 JSR $FCE0 ; - Set IRQ Vector FC97 BNE $FC83 ; - Write Tape Leader FC99 LDA #$78 FC9B JSR $FBE1 FC9E BNE $FC83 FCA0 DEC $BD ; Cassette Temp (64=00A7) FCA2 BNE $FC83 FCA4 JSR $FBC9 ; - New Character Setup FCA7 DEC $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FCA9 BPL $FC83 FCAB LDX #$0A FCAD JSR $FCE0 ; - Set IRQ Vector FCB0 CLI FCB1 INC $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FCB3 LDA $DE ; Cassette Read / Write Block Count FCB5 BEQ $FCDB FCB7 JSR $FBBB ; - Reset Tape Pointer FCBA LDX #$09 FCBC STX $BA FCBE BNE $FC42 ; - Wind Up Tape I/O FCC0 iFCC0 PHP FCC1 SEI FCC2 JSR $FCEB ; - Kill Tape Motor FCC5 LDA #$7F FCC7 STA $E84E FCCA LDA #$3C FCCC STA $E811 FCCF LDA #$3D FCD1 STA $E813 FCD4 LDX #$0C FCD6 JSR $FCE0 ; - Set IRQ Vector FCD9 PLP FCDA RTS FCDB iFCDB JSR $FCC0 ; - Wind Up Tape I/O FCDE BEQ $FC83 ; - Set IRQ Vector FCE0 iFCE0 LDA $FD4C,X ; - Kernal Reset Vectors WORD FCE3 STA $90 ; Vector: Hardware Interrupt [3: E62E, 4: E455] FCE5 LDA $FD4D,X FCE8 STA $91 FCEA RTS ; - Kill Tape Motor FCEB iFCEB LDA #$3C FCED STA $E813 FCF0 LDA $E840 ; VIA CHIP FCF3 ORA #$10 FCF5 STA $E840 ; VIA CHIP FCF8 RTS FCF9 iFCF9 LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling FCFB EOR $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FCFD STA $C3 ; Cassette Short Cnt (64=00AB): counter of seconds before tape write / checksum FCFF INC $C7 ; Pointer: Tape Buffer/ Screen Scrolling FD01 BNE $FD05 FD03 INC $C8 FD05 iFD05 JSR $FD0B FD08 BNE $FCF9 FD0A RTS FD0B iFD0B LDA $C8 FD0D CMP $CA FD0F BNE $FD15 FD11 LDA $C7 ; Pointer: Tape Buffer/ Screen Scrolling FD13 CMP $C9 ; Tape End Addresses/End of Program FD15 iFD15 RTS ; - Power-Up RESET Entry FD16 LDX #$FF FD18 SEI FD19 TXS FD1A CLD FD1B JSR $E000 ; cint Initialize Editor & Screen FD1E LDA #$FF FD20 STA $94 ; Vector: Non-Maskable Interrupt [3:C389,4: B3FF] FD22 LDA #$B3 FD24 STA $95 FD26 LDA #$78 FD28 STA $92 ; Vector: BRK Instr. Interrupt [3: FD17, 4: D478] FD2A LDA #$D4 FD2C STA $93 FD2E LDA #$A4 FD30 STA $03FA ; Monitor extension vector [D7A4] FD33 LDA #$D7 FD35 STA $03FB FD38 LDA #$00 FD3A STA $03FC ; 4: Flag: Kernal Variable for IEEE Timeout FD3D CLI FD3E LDA $E810 ; PIA 1 CHIP FD41 BMI $FD46 FD43 JMP $D472 ; Perform [monitor] FD46 iFD46 JMP $D3B6 ; initcz Initialize BASIC RAM ; - NMI Transfer Entry FD49 JMP ($0094) ; Vector: Non-Maskable Interrupt [3:C389,4: B3FF] ; - Kernal Reset Vectors WORD FD4C sFD4C .word 0000 0000 0000 0000 ; - IRQ Vectors For Tape I/O WORD FD54 .word FC99 FBF9 E455 F976 ; *** Resyncing *** F5F9 ; - Unused EMPTY ; ; PET 8032 Jump Table ; FD5D .byte AA AA AA AA AA AA AA AA ;........ FD65 .byte AA AA AA AA AA AA AA AA ;........ FD6D .byte AA AA AA AA AA AA AA AA ;........ FD75 .byte AA AA AA AA AA AA AA AA ;........ FD7D .byte AA AA AA AA AA AA AA AA ;........ FD85 .byte AA AA AA AA AA AA AA AA ;........ FD8D .byte AA AA AA AA AA AA AA AA ;........ FD95 .byte AA AA AA AA AA AA AA AA ;........ FD9D .byte AA AA AA AA AA AA AA AA ;........ FDA5 .byte AA AA AA AA AA AA AA AA ;........ FDAD .byte AA AA AA AA AA AA AA AA ;........ FDB5 .byte AA AA AA AA AA AA AA AA ;........ FDBD .byte AA AA AA AA AA AA AA AA ;........ FDC5 .byte AA AA AA AA AA AA AA AA ;........ FDCD .byte AA AA AA AA AA AA AA AA ;........ FDD5 .byte AA AA AA AA AA AA AA AA ;........ FDDD .byte AA AA AA AA AA AA AA AA ;........ FDE5 .byte AA AA AA AA AA AA AA AA ;........ FDED .byte AA AA AA AA AA AA AA AA ;........ FDF5 .byte AA AA AA AA AA AA AA AA ;........ FDFD .byte AA AA AA AA AA AA AA AA ;........ FE05 .byte AA AA AA AA AA AA AA AA ;........ FE0D .byte AA AA AA AA AA AA AA AA ;........ FE15 .byte AA AA AA AA AA AA AA AA ;........ FE1D .byte AA AA AA AA AA AA AA AA ;........ FE25 .byte AA AA AA AA AA AA AA AA ;........ FE2D .byte AA AA AA AA AA AA AA AA ;........ FE35 .byte AA AA AA AA AA AA AA AA ;........ FE3D .byte AA AA AA AA AA AA AA AA ;........ FE45 .byte AA AA AA AA AA AA AA AA ;........ FE4D .byte AA AA AA AA AA AA AA AA ;........ FE55 .byte AA AA AA AA AA AA AA AA ;........ FE5D .byte AA AA AA AA AA AA AA AA ;........ FE65 .byte AA AA AA AA AA AA AA AA ;........ FE6D .byte AA AA AA AA AA AA AA AA ;........ FE75 .byte AA AA AA AA AA AA AA AA ;........ FE7D .byte AA AA AA AA AA AA AA AA ;........ FE85 .byte AA AA AA AA AA AA AA AA ;........ FE8D .byte AA AA AA AA AA AA AA AA ;........ FE95 .byte AA AA AA AA AA AA AA AA ;........ FE9D .byte AA AA AA AA AA AA AA AA ;........ FEA5 .byte AA AA AA AA AA AA AA AA ;........ FEAD .byte AA AA AA AA AA AA AA AA ;........ FEB5 .byte AA AA AA AA AA AA AA AA ;........ FEBD .byte AA AA AA AA AA AA AA AA ;........ FEC5 .byte AA AA AA AA AA AA AA AA ;........ FECD .byte AA AA AA AA AA AA AA AA ;........ FED5 .byte AA AA AA AA AA AA AA AA ;........ FEDD .byte AA AA AA AA AA AA AA AA ;........ FEE5 .byte AA AA AA AA AA AA AA AA ;........ FEED .byte AA AA AA AA AA AA AA AA ;........ FEF5 .byte AA AA AA AA AA AA AA AA ;........ FEFD .byte AA AA AA AA AA AA AA AA ;........ FF05 .byte AA AA AA AA AA AA AA AA ;........ FF0D .byte AA AA AA AA AA AA AA AA ;........ FF15 .byte AA AA AA AA AA AA AA AA ;........ FF1D .byte AA AA AA AA AA AA AA AA ;........ FF25 .byte AA AA AA AA AA AA AA AA ;........ FF2D .byte AA AA AA AA AA AA AA AA ;........ FF35 .byte AA AA AA AA AA AA AA AA ;........ FF3D .byte AA AA AA AA AA AA AA AA ;........ FF45 .byte AA AA AA AA AA AA AA AA ;........ FF4D .byte AA AA AA AA AA AA AA AA ;........ FF55 .byte AA AA AA AA AA AA AA AA ;........ FF5D .byte AA AA AA AA AA AA AA AA ;........ FF65 .byte AA AA AA AA AA AA AA AA ;........ FF6D .byte AA AA AA AA AA AA AA AA ;........ FF75 .byte AA AA AA AA AA AA AA AA ;........ FF7D .byte AA AA AA AA AA AA AA AA ;........ FF85 .byte AA AA AA AA AA AA AA AA ;........ FF8D .byte AA AA AA AA AA AA ;...... ; Perform [concat] FF93 JMP $DAC7 ; Perform [concat] ; Perform [dopen] FF96 JMP $D942 ; Perform [dopen] ; Perform [dclose] FF99 JMP $DA07 ; Perform [dclose] ; Perform [record] FF9C JMP $D7AF ; Perform [record] ; Perform [header] FF9F JMP $D9D2 ; Perform [header] ; Perform [collect] FFA2 JMP $DA65 ; Perform [collect] ; Perform [backup] FFA5 JMP $DA7E ; Perform [backup] ; Perform [copy] FFA8 JMP $DAA7 ; Perform [copy] ; Perform [append] FFAB JMP $D977 ; Perform [append] ; Perform [dsave] FFAE JMP $DB0D ; Perform [dsave] ; Perform [dload] FFB1 JMP $DB3A ; Perform [dload] ; Perform [catalog/directory] FFB4 JMP $D873 ; Perform [catalog/directory] ; Perform [rename] FFB7 JMP $DB55 ; Perform [rename] ; Perform [scratch] FFBA JMP $DB66 ; Perform [scratch] ; jmp $d995 FFBD iFFBD JMP $D995 ; ? ; Perform [open] FFC0 JMP $F560 ; opent Perform [open] ; Perform [close] FFC3 JMP $F2DD ; closet Perform [close] ; chkin Set Input FFC6 iFFC6 JMP $F7AF ; chkin Set Input Device ; chkout Set Output FFC9 iFFC9 JMP $F7FE ; chkout Set Output Device ; clrch Restore I/O Vector FFCC iFFCC JMP $F2A6 ; clrchn Restore Default I/O ; chrin Input Vector, chrin FFCF iFFCF JMP $F215 ; chrin Input a byte ; chrout Output Vector, chrout FFD2 iFFD2 JMP $F266 ; chrout Output One Character ; Perform [load] FFD5 JMP $F401 ; verfyt Perform [load] ; Perform [save] FFD8 JMP $F6DD ; savet Perform [save] ; Perform [verify] FFDB JMP $F4F6 ; verfyt Perform [verify] ; sys Perform [sys] FFDE JMP $F6C3 ; syst Perform [sys] ; jmp $f343 stop Test-Stop FFE1 iFFE1 JMP $F343 ; stop Check STOP Key ; jmp $f205 getin Get From Keyboad FFE4 iFFE4 JMP $F205 ; - Input From Screen or Keyboard ; jmp $f2a2 clall Close All Channels And Files FFE7 iFFE7 JMP $F2A2 ; clall Abort All Files ; jmp $f768 udtim Update System Jiffy Clock ;fff6 Vectors FFEA iFFEA JMP $F768 ; Update Jiffy Clock FFED TAX FFEE TAX FFEF TAX FFF0 TAX FFF1 TAX FFF2 TAX FFF3 TAX FFF4 TAX FFF5 TAX ; [aaaa] - WORD FFF6 .word AAAA ; [aaaa] - WORD ;fffa Transfer Vectors FFF8 .word AAAA ; [fd49] NMI WORD FFFA .word FD49 ; [fd16] RESET WORD FFFC .word FD16 ; [e442] IRQ WORD FFFE .word E442 ; Misassembly source v1.3 Generated Wed May 31 19:01:40 EET DST 1995