;; .cpu 0 # 6502 .include "atari_os_B_src_vars.s.txt" .include "atari_os_B_src_fp.h.txt" .include "atari_os_B_src_pokey.h.txt" .include "atari_os_B_src_antic.h.txt" .include "atari_os_B_src_gtia.h.txt" .include "atari_os_B_src_pia.h.txt" ; .include "" ; .include "" ; .include "" ; .include "" .include "atari_os_B_src_done.s.txt" ; labels for places outside ROM ; shuts assembler up ; .org $0078 L0078: .org $028C L028C: .org $6666 L6666: .org $BFFA LBFFA: .org $9FFA L9FFA: .org $9FFE L9FFE: .org $BFFE LBFFE: ; arithmetic, floating point starts here: .org _AFP AFP: jsr LDBA1 jsr LDBBB bcs LD841 ldx #$ED ldy #$04 jsr LDA48 ldx #$FF stx DIGRT jsr ZFR0 beq LD81C LD818: lda #$FF sta FCHFLG LD81C: jsr LDB94 bcs LD842 pha ldx $D5 bne LD837 jsr LDBEB pla ora $D9 sta $D9 ldx DIGRT bmi LD818 inx stx DIGRT bne LD818 LD837: pla ldx DIGRT bpl LD83E inc NSIGN LD83E: jmp LD818 LD841: rts LD842: cmp #$2E beq LD85A cmp #$45 beq LD863 ldx FCHFLG bne LD8B6 cmp #$2B beq LD818 cmp #$2D beq LD856 LD856: sta $EE beq LD818 LD85A: ldx DIGRT bpl LD8B6 inx stx DIGRT beq LD818 LD863: lda CIX sta FRX jsr LDB94 bcs LD8A3 LD86C: tax lda NSIGN pha stx NSIGN jsr LDB94 bcs LD88E pha lda NSIGN asl a sta NSIGN asl a asl a adc NSIGN sta NSIGN pla clc adc NSIGN sta NSIGN ldy CIX jsr LDB9D LD88E: lda ESIGN beq LD89B lda NSIGN eor #$FF clc adc #$01 sta NSIGN LD89B: pla clc adc NSIGN sta NSIGN bne LD8B6 LD8A3: cmp #$2B beq LD8AD cmp #$2D bne LD8B2 sta ESIGN LD8AD: jsr LDB94 bcc LD86C LD8B2: lda FRX sta CIX LD8B6: dec CIX lda NSIGN ldx DIGRT bmi LD8C3 beq LD8C3 sec sbc DIGRT LD8C3: pha rol a pla ror a sta NSIGN bcc LD8CE jsr LDBEB LD8CE: lda NSIGN clc adc #$44 sta FR0 jsr LDC00 bcs LD8E5 ldx $EE beq LD8E4 lda FR0 ora #$80 sta FR0 LD8E4: clc LD8E5: rts FASC: jsr LDA51 lda #$30 sta $057F lda FR0 beq LD91A and #$7F cmp #$3F bcc LD920 cmp #$45 bcs LD920 sec sbc #$3F jsr LDC70 jsr LDCA4 ora #$80 sta LBUFF,x lda LBUFF cmp #$2E beq LD914 jmp LD988 LD914: jsr LDCC1 jmp LD99C LD91A: lda #$B0 sta LBUFF rts LD920: lda #$01 jsr LDC70 jsr LDCA4 inx stx CIX lda FR0 asl a sec sbc #$80 ldx LBUFF cpx #$30 beq LD94F ldx $0581 ldy $0582 stx $0582 sty $0581 ldx CIX cpx #$02 bne LD94C inc CIX LD94C: clc adc #$01 LD94F: sta NSIGN lda #$45 ldy CIX jsr LDC9F sty CIX lda NSIGN bpl LD969 lda #$00 sec sbc NSIGN sta NSIGN lda #$2D bne LD96B LD969: lda #$2B LD96B: jsr LDC9F ldx #$00 lda NSIGN LD972: sec sbc #$0A bcc LD97A inx bne LD972 LD97A: clc adc #$0A pha txa jsr LDC9D pla ora #$80 jsr LDC9D LD988: lda LBUFF cmp #$30 bne LD99C clc lda INBUFF adc #$01 sta INBUFF lda $F4 adc #$00 sta $F4 LD99C: lda FR0 bpl LD9A9 jsr LDCC1 ldy #$00 lda #$2D sta (INBUFF),y LD9A9: rts IFP: lda FR0 sta $F8 lda $D5 sta ZTEMP4 jsr ZFR0 sed ldy #$10 LD9B8: asl $F8 rol ZTEMP4 ldx #$03 LD9BE: lda FR0,x adc FR0,x sta FR0,x dex bne LD9BE dey bne LD9B8 cld lda #$42 sta FR0 jmp LDC00 FPI: lda #$00 sta ZTEMP4 sta $F8 lda FR0 bmi LDA42 cmp #$43 bcs LDA42 sec sbc #$40 bcc LDA24 adc #$00 asl a sta ZTEMP1 LD9EA: jsr LDA5A bcs LDA42 lda ZTEMP4 sta ZTEMP3 lda $F8 sta $FA jsr LDA5A bcs LDA42 jsr LDA5A bcs LDA42 clc lda $F8 adc $FA sta $F8 lda ZTEMP4 adc ZTEMP3 sta ZTEMP4 bcs LDA42 jsr LDCB9 clc adc $F8 sta $F8 lda ZTEMP4 adc #$00 bcs LDA42 sta ZTEMP4 dec ZTEMP1 bne LD9EA LDA24: jsr LDCB9 cmp #$05 bcc LDA38 clc lda $F8 adc #$01 sta $F8 lda ZTEMP4 adc #$00 sta ZTEMP4 LDA38: lda $F8 sta FR0 lda ZTEMP4 sta $D5 clc rts LDA42: sec rts ZFR0: ldx #$D4 ZF1: ldy #$06 LDA48: lda #$00 LDA4A: sta LINZBS,x inx dey bne LDA4A rts LDA51: lda #$05 sta $F4 lda #$80 sta INBUFF rts LDA5A: clc rol $F8 rol ZTEMP4 rts FSUB: lda FR1 eor #$80 sta FR1 FADD: lda FR1 and #$7F sta ZTEMP4 lda FR0 and #$7F sec sbc ZTEMP4 bpl LDA85 ldx #$05 LDA77: lda FR0,x ldy FR1,x sta FR1,x tya sta FR0,x dex bpl LDA77 bmi FADD LDA85: beq LDA8E cmp #$05 bcs LDAA4 jsr LDC3E LDA8E: sed lda FR0 eor FR1 bmi LDAB3 ldx #$04 clc LDA98: lda $D5,x adc $E1,x sta $D5,x dex bpl LDA98 cld bcs LDAA7 LDAA4: jmp LDC00 LDAA7: lda #$01 jsr LDC3A lda #$01 sta $D5 jmp LDC00 LDAB3: ldx #$04 sec LDAB6: lda $D5,x sbc $E1,x sta $D5,x dex bpl LDAB6 bcc LDAC5 cld jmp LDC00 LDAC5: lda FR0 eor #$80 sta FR0 sec ldx #$04 LDACE: lda #$00 sbc $D5,x sta $D5,x dex bpl LDACE cld jmp LDC00 FMUL: lda FR0 beq LDB24 lda FR1 beq LDB21 jsr LDCCF sec sbc #$40 sec adc FR1 bmi LDB26 jsr LDCE0 LDAF1: lda $DF and #$0F sta $F6 LDAF7: dec $F6 bmi LDB01 jsr LDD01 jmp LDAF7 LDB01: lda $DF lsr a lsr a lsr a lsr a sta $F6 LDB09: dec $F6 bmi LDB13 jsr LDD05 jmp LDB09 LDB13: jsr LDC62 dec ZTEMP1 bne LDAF1 LDB1A: lda NSIGN sta FR0 jmp LDC04 LDB21: jsr ZFR0 LDB24: clc rts LDB26: sec rts FDIV: lda FR1 beq LDB26 lda FR0 beq LDB24 jsr LDCCF sec sbc FR1 clc adc #$40 bmi LDB26 jsr LDCE0 inc ZTEMP1 jmp LDB4E LDB43: ldx #$00 LDB45: lda $D5,x sta FR0,x inx cpx #$0C bne LDB45 LDB4E: ldy #$05 sec sed LDB52: lda FRE,y sbc FR2,y sta FRE,y dey bpl LDB52 cld bcc LDB65 inc $D9 bne LDB4E LDB65: jsr LDD0F asl $D9 asl $D9 asl $D9 asl $D9 LDB70: ldy #$05 sec sed LDB74: lda FRE,y sbc FR1,y sta FRE,y dey bpl LDB74 cld bcc LDB87 inc $D9 bne LDB70 LDB87: jsr LDD09 dec ZTEMP1 bne LDB43 jsr LDC62 jmp LDB1A LDB94: jsr LDBAF ldy CIX bcc LDB9D lda (INBUFF),y LDB9D: iny sty CIX rts LDBA1: ldy CIX lda #$20 LDBA5: cmp (INBUFF),y bne LDBAC iny bne LDBA5 LDBAC: sty CIX rts LDBAF: ldy CIX lda (INBUFF),y sec sbc #$30 bcc LDBD0 cmp #$0A rts LDBBB: lda CIX pha jsr LDB94 bcc LDBE2 cmp #$2E beq LDBDB cmp #$2B beq LDBD2 cmp #$2D beq LDBD2 LDBCF: pla LDBD0: sec rts LDBD2: jsr LDB94 bcc LDBE2 cmp #$2E bne LDBCF LDBDB: jsr LDB94 bcc LDBE2 bcs LDBCF LDBE2: pla sta CIX clc rts LDBE7: ldx #$E7 bne LDBED LDBEB: ldx #$D5 LDBED: ldy #$04 LDBEF: clc rol RAMLO,x rol $03,x rol CASINI,x rol $01,x rol LINZBS,x rol FRX dey bne LDBEF rts LDC00: ldx #$00 stx FRE LDC04: ldx #$04 lda FR0 beq LDC38 LDC0A: lda $D5 bne LDC28 ldy #$00 LDC10: lda $D6,y sta $D5,y iny cpy #$05 bcc LDC10 dec FR0 dex bne LDC0A lda $D5 bne LDC28 sta FR0 clc rts LDC28: lda FR0 and #$7F cmp #$71 bcc LDC31 rts LDC31: cmp #$0F bcs LDC38 jsr ZFR0 LDC38: clc rts LDC3A: ldx #$D4 bne LDC40 LDC3E: ldx #$E0 LDC40: stx ZTEMP3 sta ZTEMP4 sta $F8 LDC46: ldy #$04 LDC48: lda RAMLO,x sta $05,x dex dey bne LDC48 lda #$00 sta $05,x ldx ZTEMP3 dec ZTEMP4 bne LDC46 lda LINZBS,x clc adc $F8 sta LINZBS,x rts LDC62: ldx #$0A LDC64: lda FR0,x sta $D5,x dex bpl LDC64 lda #$00 sta FR0 rts LDC70: sta ZTEMP4 ldx #$00 ldy #$00 LDC76: jsr LDC93 sec sbc #$01 sta ZTEMP4 lda $D5,x lsr a lsr a lsr a lsr a jsr LDC9D lda $D5,x and #$0F jsr LDC9D inx cpx #$05 bcc LDC76 LDC93: lda ZTEMP4 bne LDC9C lda #$2E jsr LDC9F LDC9C: rts LDC9D: ora #$30 LDC9F: sta LBUFF,y iny rts LDCA4: ldx #$0A LDCA6: lda LBUFF,x cmp #$2E beq LDCB4 cmp #$30 bne LDCB8 dex bne LDCA6 LDCB4: dex lda LBUFF,x LDCB8: rts LDCB9: jsr LDBEB lda FRX and #$0F rts LDCC1: sec lda INBUFF sbc #$01 sta INBUFF lda $F4 sbc #$00 sta $F4 rts LDCCF: lda FR0 eor FR1 and #$80 sta $EE asl FR1 lsr FR1 lda FR0 and #$7F rts LDCE0: ora $EE sta NSIGN lda #$00 sta FR0 sta FR1 jsr LDD28 jsr LDBE7 lda FRX and #$0F sta FR2 lda #$05 sta ZTEMP1 jsr LDD34 jsr ZFR0 rts LDD01: ldx #$D9 bne LDD0B LDD05: ldx #$D9 bne LDD11 LDD09: ldx #$DF LDD0B: ldy #$E5 bne LDD13 LDD0F: ldx #$DF LDD11: ldy #$EB LDD13: lda #$05 sta ZTEMP4 clc sed LDD19: lda LINZBS,x adc LINZBS,y sta LINZBS,x dex dey dec ZTEMP4 bpl LDD19 cld rts LDD28: ldy #$05 LDD2A: lda FR1,y sta FR2,y dey bpl LDD2A rts LDD34: ldy #$05 LDD36: lda FR0,y sta FRE,y dey bpl LDD36 rts PLYEVL: stx FPTR2 sty $FF sta ESIGN ldx #$E0 ldy #$05 jsr FSTOR jsr FMOVE ldx FPTR2 ldy $FF jsr FLD0R dec ESIGN beq LDD88 LDD5B: jsr FMUL bcs LDD88 clc lda FPTR2 adc #$06 sta FPTR2 bcc LDD6F lda $FF adc #$00 sta $FF LDD6F: ldx FPTR2 ldy $FF jsr FLD1R jsr FADD bcs LDD88 dec ESIGN beq LDD88 ldx #$E0 ldy #$05 jsr FLD1R bmi LDD5B LDD88: rts FLD0R: stx FLPTR sty $FD FLD0P: ldy #$05 LDD8F: lda (FLPTR),y sta FR0,y dey bpl LDD8F rts FLD1R: stx FLPTR sty $FD FLD1P: ldy #$05 LDD9E: lda (FLPTR),y sta FR1,y dey bpl LDD9E rts FSTOR: stx FLPTR sty $FD FSTOP: ldy #$05 LDDAD: lda FR0,y sta (FLPTR),y dey bpl LDDAD rts FMOVE: ldx #$05 LDDB8: lda FR0,x sta FR1,x dex bpl LDDB8 rts EXP: ldx #$89 ldy #$DE jsr FLD1R jsr FMUL bcs LDE4B EXP10: lda #$00 sta DIGRT lda FR0 sta FCHFLG and #$7F sta FR0 sec sbc #$40 bmi LDE03 cmp #$04 bpl LDE4B ldx #$E6 ldy #$05 jsr FSTOR jsr FPI lda FR0 sta DIGRT lda $D5 bne LDE4B jsr IFP jsr FMOVE ldx #$E6 ldy #$05 jsr FLD0R jsr FSUB LDE03: lda #$0A ldx #$4D ldy #$DE jsr PLYEVL jsr FMOVE jsr FMUL lda DIGRT beq LDE39 clc ror a sta FR1 lda #$01 bcc LDE20 lda #$10 LDE20: sta $E1 ldx #$04 lda #$00 LDE26: sta $E2,x dex bpl LDE26 lda FR1 clc adc #$40 bcs LDE4B bmi LDE4B sta FR1 jsr FMUL LDE39: lda FCHFLG bpl LDE4A jsr FMOVE ldx #$8F ldy #$DE jsr FLD0R jsr FDIV LDE4A: rts LDE4B: sec rts and $9417,x ora LINZBS,y and $3357,x ora LINZBS brk rol $5405,x ror $62,x brk rol $1932,x .byte $62 .byte $27 brk .byte $3F ora (SAVADR,x) rts bmi LDEA1 .byte $3F .byte $07 .byte $32 .byte $03 .byte $27 eor (FEOF,x) and FMSZPG .byte $34 lsr $75,x .byte $3F ror ICPTHZ .byte $37 bmi LOG rti ora (BUFADR,x) .byte $12 .byte $92 eor FEOF,x sta $9999,y sta $3F99,y .byte $43 .byte $42 sty $48,x ora $0140,y brk brk brk brk LDE95: stx FPTR2 sty $FF ldx #$E0 ldy #$05 jsr FSTOR .byte $A6 LDEA1: inc LFFA4,x jsr FLD1R jsr FADD ldx #$E6 ldy #$05 jsr FSTOR ldx #$E0 ldy #$05 jsr FLD0R ldx FPTR2 ldy $FF jsr FLD1R jsr FSUB ldx #$E6 ldy #$05 jsr FLD1R jsr FDIV rts LOG: lda #$01 bne LDED3 LOG10: lda #$00 LDED3: sta FCHFLG lda FR0 bpl LDEDB sec rts LDEDB: lda FR0 sta FR1 sec sbc #$40 asl a sta DIGRT lda $D5 and #$F0 bne LDEEF lda #$01 bne LDEF3 LDEEF: inc DIGRT lda #$10 LDEF3: sta $E1 ldx #$04 lda #$00 LDEF9: sta $E2,x dex bpl LDEF9 jsr FDIV ldx #$66 ldy #$DF jsr LDE95 ldx #$E6 ldy #$05 jsr FSTOR jsr FMOVE jsr FMUL lda #$0A ldx #$72 ldy #$DF jsr PLYEVL ldx #$E6 ldy #$05 jsr FLD1R jsr FMUL ldx #$6C ldy #$DF jsr FLD1R jsr FADD jsr FMOVE lda #$00 sta $D5 lda DIGRT sta FR0 bpl LDF46 eor #$FF clc adc #$01 sta FR0 LDF46: jsr IFP bit DIGRT bpl LDF53 lda #$80 ora FR0 sta FR0 LDF53: jsr FADD lda FCHFLG beq LDF64 ldx #$89 ldy #$DE jsr FLD1R jsr FDIV LDF64: clc rts rti .byte $03 asl ICCOMZ,x .byte $77 ror FEOF bvc LDF6F LDF6F: brk brk brk .byte $3F eor #$15 .byte $57 ora (WARMST),y .byte $BF eor (ROWAC),y eor #$47 php .byte $3F and $5720,y adc ($95,x) .byte $BF .byte $04 and $0363,y eor FEOF,x bpl LDF96 bmi LDFA1 .byte $64 .byte $3F ora #$39 php .byte $04 rts LDF96: .byte $3F .byte $12 .byte $42 cli .byte $47 .byte $42 .byte $3F .byte $17 .byte $37 .byte $12 .byte $06 LDFA1: php .byte $3F plp sta ICBLHZ,x adc (ICCOMT),y .byte $3F stx $85 dey stx $44,y rol $0516,x .byte $44 eor #$00 ldx $6895,y sec eor LINZBS .byte $3F .byte $02 pla adc $1694,y .byte $BF .byte $04 .byte $92 sei bcc LDF46 .byte $3F .byte $07 .byte $03 ora ICHIDZ,x brk .byte $BF php .byte $92 and #$12 .byte $44 .byte $3F ora (WARMST),y rti .byte $09 LDFD7: ora ($BF),y .byte $14 plp and ($56),y .byte $04 .byte $3F ora $9899,y .byte $77 .byte $44 .byte $BF .byte $33 .byte $33 .byte $33 and ($13),y .byte $3F sta $9999,y sta $3F99,y sei .byte $53 tya asl BFENLO,x tya asl BFENLO,x .byte $FC cpx #$32 bvc LDFD7 pla .byte $11 .include "atari_os_B_src_charset.s.txt" ; ; SCREEN EDITOR HANDLER ENTRY POINT ; ; EDITRV: EDITOR: .addr EOPEN-1 .addr RETUR1-1 ; CLOSE .addr EGETCH-1 .addr EOUTCH-1 .addr RETUR1-1 ; (STATUS) .addr NOFUNC-1 ; (SPECIAL) LE40C: jmp PWRONA .byte $00 ; ; DISPLAY HANDLER ENTRY POINT ; SCRNV: DISPLA: .addr DOPEN-1 .addr RETUR1-1 ; CLOSE .addr GETCH-1 .addr OUTCH-1 .addr RETUR1-1 ; (STATUS) .addr DRAW-1 ; (SPECIAL) LE41C: ; jmp PWRONA ; original doc jmp KBDORG ; disassembly .byte $00 ; ; DISPLAY HANDLER ENTRY POINT ; KEYBDV: KBDHND: .addr RETUR1-1 .addr RETUR1-1 ; CLOSE .addr KGETC2 .addr NOFUNC-1 .addr RETUR1-1 ; CLOSE .addr NOFUNC-1 ; (SPECIAL) LE42C: ; jmp PWRONA ; original doc jmp KBDORG ; disassembly .byte $00 PRINTV: .word $EE9E,$EEDB,$EE9D,$EEA6 .word $EE80,$EE9D,$784C,$00EE CASETV: .addr SPECIAL .addr CLOSEC-1 .addr GBYTE-1 .addr PBYTE-1 .addr STATU-1 .addr SPECIAL-1 LE44C: jmp INIT .byte $00 jmp DINIT DSKINV: jmp DSKIF CIOV: jmp CIO SIOV: jmp SIO LE45C: jmp SETVBL SYSVBV: .byte $4C VBIVAL: .byte $AE .byte $E7 XITVBV: .byte $4C VBIXVL: ora $E9 LE465: jmp SIOORG LE468: jmp SENDEN LE46B: jmp INTORG LE46E: jmp CIOINT BLKBDV: .byte $4C LE472: .byte $23 LE473: .byte $F2 WARMSV: jmp RESET COLDSV: jmp PWRUP LE47A: jmp RBLOK LE47D: jmp OPINP VCTABL: .addr SYRTI ; VDSLST .addr SYIRQB ; VPCRED .addr SYIRQB ; VINTER .addr SYIRQB ; VBREAK ; .RES 8 ; original documentation ; these are the words the disassembler actually found: .addr PIRQ5 ; .addr ISRSIR ; .addr ISRODN ; .addr ISRTD ; .addr SYIRQB ; VTIMR1 .addr SYIRQB ; VTIMR2 .addr SYIRQB ; VTIMR4 .addr SYIRQ ; VIMIRQ .addr 0 ; CDTMV1-4 .addr 0 .addr 0 .addr 0 .addr 0 .addr SYSVBL ; VVBLKI .addr XITVBL ; VVBLKD .include "atari_os_B_src_cio.s.txt" ; made a start from OCR ; back to auto-disassembled source: ldy #$85 rts CIO: sta CIOCHR stx ICIDNO txa and #$0F bne CIERR cpx #$80 bcc IOC1 CIERR: ldy #$86 jmp CIRTN1 IOC1: ldy #$00 IOC1A: lda ICHID,x sta ICHIDZ,y inx iny cpy #$0C bcc IOC1A ldy #$84 lda ICCOMZ cmp #$03 bcc CIERR4 tay cpy #$0E bcc IOC2 ldy #$0E IOC2: sty ICCOMT lda eeek_1,y beq CIOPEN cmp #$02 beq CICLOS cmp #$08 bcs CISTSP cmp #$04 beq CIREAD jmp CIWRIT CIOPEN: lda ICHIDZ cmp #$FF beq IOC6 ldy #$81 CIERR4: jmp CIRTN1 IOC6: jsr DEVSRC IOC7: bcs CIERR4 jsr COMENT bcs CIERR4 jsr GOHAND lda #$0B sta ICCOMT jsr COMENT lda ICSPRZ sta ICPTLZ lda $2D sta ICPTHZ jmp CIRTN2 CICLOS: ldy #$01 sty ICSTAZ jsr COMENT bcs CICLO2 jsr GOHAND CICLO2: lda #$FF sta ICHIDZ lda #$E4 sta ICPTHZ lda #$C0 sta ICPTLZ jmp CIRTN2 CISTSP: lda ICHIDZ cmp #$FF bne CIST1 jsr DEVSRC bcs CIERR4 CIST1: jsr COMENT jsr GOHAND ldx ICIDNO lda ICHID,x sta ICHIDZ jmp CIRTN2 CIREAD: lda ICCOMZ and ICAX1Z bne RCI1A ldy #$83 RCI1B: jmp CIRTN1 RCI1A: jsr COMENT bcs RCI1B lda ICBLLZ ora ICBLHZ bne RCI3 jsr GOHAND sta CIOCHR jmp CIRTN2 RCI3: jsr GOHAND sta CIOCHR bmi RCI14 ldy #$00 sta (ICBALZ),y jsr INCBFP lda ICCOMZ and #$02 bne RCI1 lda CIOCHR cmp #$9B bne RCI1 jsr DECBFL jmp RCI14 RCI1: jsr DECBFL bne RCI3 RCI2: lda ICCOMZ and #$02 bne RCI14 RCI6: jsr GOHAND sta CIOCHR bmi RCI14 lda CIOCHR cmp #$9B bne RCI6 RCI11: lda #$89 sta ICSTAZ RCI14: jsr SUBBFL jmp CIRTN2 CIWRIT: lda ICCOMZ and ICAX1Z bne WCI1A ldy #$87 WCI1B: jmp CIRTN1 WCI1A: jsr COMENT bcs WCI1B lda ICBLLZ ora ICBLHZ bne WCI3 lda CIOCHR inc ICBLLZ bne WCI4 WCI3: ldy #$00 lda (ICBALZ),y sta CIOCHR WCI4: jsr GOHAND bmi WCI5 jsr INCBFP lda ICCOMZ and #$02 bne WCI1 lda CIOCHR cmp #$9B bne WCI1 jsr DECBFL jmp WCI5 WCI1: jsr DECBFL bne WCI3 WCI2: lda ICCOMZ and #$02 bne WCI5 lda #$9B jsr GOHAND WCI5: jsr SUBBFL jmp CIRTN2 CIRTN1: sty ICSTAZ CIRTN2: ldy ICIDNO lda ICBAL,y sta ICBALZ lda ICBAH,y sta ICBAHZ ldx #$00 CIRT3: lda ICHIDZ,x sta ICHID,y inx iny cpx #$0C bcc CIRT3 lda CIOCHR ldx ICIDNO ldy ICSTAZ rts COMENT: ldy ICHIDZ cpy #$22 bcc COM1 ldy #$85 bcs COM2 COM1: lda $031B,y sta ICSPRZ lda $031C,y sta $2D ldy ICCOMT lda eeek_1,y tay lda (ICSPRZ),y tax iny lda (ICSPRZ),y sta $2D stx ICSPRZ clc COM2: rts DECBFL: dec ICBLLZ lda ICBLLZ cmp #$FF bne DECBF1 dec ICBLHZ DECBF1: ora ICBLHZ rts INCBFP: inc ICBALZ bne INCBF1 inc ICBAHZ INCBF1: rts SUBBFL: ldx ICIDNO sec lda ICBLL,x sbc ICBLLZ sta ICBLLZ lda ICBLH,x sbc ICBLHZ sta ICBLHZ rts GOHAND: ldy #$92 jsr CIJUMP sty ICSTAZ cpy #$00 rts CIJUMP: tax lda $2D pha lda ICSPRZ pha txa ldx ICIDNO rts DEVSRC: ldy #$00 lda (ICBALZ),y beq CIERR2 ldy #$21 DEVS1: cmp HATABS,y beq DEVS2 dey dey dey bpl DEVS1 CIERR2: ldy #$82 sec bcs DEVS4 DEVS2: tya sta ICHIDZ sec ldy #$01 lda (ICBALZ),y sbc #$30 cmp #$0A bcc DEVS3 lda #$01 DEVS3: .byte $85 eeek_1: and (DSKFMS,x) DEVS4: rts COMTAB: .byte $00,$04,$04,$04,$04,$06,$06,$06 .byte $06,$02,$08,$0A INTORG: lda #$40 sta NMIEN lda #$38 sta PACTL sta PBCTL lda #$00 sta PORTA nop nop nop lda #$3C sta PACTL sta PBCTL rts PIRQ: jmp (VIMIRQ) CMPTAB: .byte $80,$40,$04,$02,$01,$08,$10,$20 ADRTAB: .byte $36,$08,$14,$12,$10,$0E,$0C,$0A SYIRQ: pha lda IRQEN and #$20 bne SYIRQ2 lda #$DF sta IRQEN lda POKMSK sta IRQEN jmp (VSERIN) SYIRQ2: txa pha ldx #$06 LOOPM: lda CMPTAB,x cpx #$05 bne LOOPM2 and POKMSK beq LL LOOPM2: bit IRQEN beq JMPP LL: dex bpl LOOPM jmp SYIRQ8 JMPP: eor #$FF sta IRQEN lda POKMSK sta IRQEN lda ADRTAB,x tax lda VDSLST,x sta L028C lda $0201,x sta $028D pla tax jmp (L028C) lda #$00 sta BRKKEY sta SSFLAG sta CRSINH sta ATRACT pla rti SYIRQ8: pla tax bit PACTL bpl SYIRQ9 lda PORTA jmp (VPRCED) SYIRQ9: bit PBCTL bpl SYIRQA lda PORTB jmp (VINTER) SYIRQA: pla sta L028C pla pha and #$10 beq SYRTI2 lda L028C pha jmp (VBREAK) SYRTI2: lda L028C pha SYIRQB: pla SYRTI: rti PNMI: bit $D40F bpl PNMI1 jmp (VDSLST) PNMI1: pha lda $D40F and #$20 beq LE7A4 jmp WARMSV LE7A4: txa pha tya pha sta $D40F jmp (VVBLKI) SYSVBL: inc $14 bne SYSVB1 inc ATRACT inc $13 bne SYSVB1 inc RTCLOK SYSVB1: lda #$FE ldx #$00 ldy ATRACT bpl VBATRA sta ATRACT ldx $13 lda #$F6 VBATRA: sta DRKMSK stx COLRSH ldx #$00 jsr DCTIMR bne SYSVB2 jsr JTIMR1 SYSVB2: lda CRITIC bne XXIT tsx lda $0104,x and #$04 beq SYSVB3 XXIT: jmp XITVBL SYSVB3: lda PENV sta LPENV lda PENH sta LPENH lda $0231 sta DLISTH lda SDLSTL sta DLISTL lda SDMCTL sta DMACTL lda GTIA sta PRIOR ldx #$08 stx CONSOL SCOLLP: cli lda PCOLR0,x eor COLRSH and DRKMSK sta COLPM0,x dex bpl SCOLLP lda CHBAS sta CHBASE lda CHACT sta CHACTL ldx #$02 jsr DCTIMR bne SYSVB4 jsr JTIMER2 SYSVB4: ldx #$02 SYSVBB: inx inx lda CDTMV1,x ora $0219,x beq SYSVBA jsr DCTIMR sta CDTMA1,x SYSVBA: cpx #$08 bne SYSVBB lda SKCTL and #$04 beq SYSVB6A lda KEYDEL beq SYSVB6A dec KEYDEL SYSVB6A:lda SRTIMR beq SYSVB7 lda SKCTL and #$04 bne SYSVB6 dec SRTIMR bne SYSVB7 lda #$06 sta SRTIMR lda $D209 sta FILDAT SYSVB7: ldy #$01 ldx #$03 STLOOP: lda PORTA,y lsr a lsr a lsr a lsr a sta $0278,x dex lda PORTA,y and #$0F sta $0278,x dex dey bpl STLOOP ldx #$03 STRL: lda $D010,x sta $0284,x lda AUDF1,x sta $0270,x lda $D204,x sta $0274,x dex bpl STRL sta $D20B ldx #$06 ldy #$03 PRTLP: lda $0278,y lsr a lsr a lsr a sta $027D,x lda #$00 rol a sta $027C,x dex dex dey bpl PRTLP jmp (VVBLKD) SYSVB6: lda #$00 sta SRTIMR beq SYSVB7 JTIMR1: jmp (CDTMA1) JTIMER2:jmp (CDTMA2) DCTIMR: ldy CDTMV1,x bne DCTIM1 ldy $0219,x beq DCTXF dec $0219,x DCTIM1: dec CDTMV1,x bne DCTXF ldy $0219,x bne DCTXF lda #$00 rts DCTXF: lda #$FF rts SETVBL: asl a sta INTEMP txa ldx #$05 sta WSYNC SETLOP: dex bne SETLOP ldx INTEMP sta $0217,x tya sta VIMIRQ,x rts XITVBL: pla tay pla tax pla rti ror MLTTMP ror a:MLTTMP,x brk .byte $7C jmp SETVBL ror HOLDCH brk brk .byte $3C ror NEWROW rts ror NOCKSM brk brk sei jmp (L6666) jmp (L0078) brk ror $7C60,x rts rts ror a:LINZBS,x ror $7C60,x rts rts rts brk brk rol $6060,x ror $3E66 brk brk ror MLTTMP .byte $7E SIOORG: lda #$3C sta PACTL lda #$3C sta PBCTL lda #$03 sta SSKCTL sta SOUNDR sta SKCTL rts SIO: tsx stx STACKP lda #$01 sta CRITIC lda DDEVIC cmp #$60 bne NOTCST jmp CASENT NOTCST: lda #$00 sta CASFLG lda #$01 sta DRETRY COMMND: lda #$0D sta CRETRY COMFRM: lda #$28 sta $D204 lda #$00 sta $D206 clc lda DDEVIC adc DUNIT adc #$FF sta CDEVIC lda DCOMND sta $023B lda DAUX1 sta CAUX1 lda DAUX2 sta CAUX2 clc lda #$3A sta BUFRLO adc #$04 sta BFENLO lda #$02 sta BUFRHI sta BFENHI lda #$34 sta PBCTL jsr SENDIN lda ERRFLG bne BADCOM tya bne ACKREC BADCOM: dec CRETRY bpl COMFRM jmp DERR1 ACKREC: lda DSTATS bpl WATCOM lda #$0D sta CRETRY jsr LDPNTR jsr SENDIN beq BADCOM WATCOM: jsr STTMOT lda #$00 sta ERRFLG jsr WAITER beq DERR bit DSTATS bvs MODATA lda ERRFLG bne DERR1 beq RETURN MODATA: jsr LDPNTR jsr RECEIV DERR: lda ERRFLG beq NOTERR lda TSTAT sta STATUS NOTERR: lda STATUS cmp #$01 beq RETURN DERR1: dec DRETRY bmi RETURN jmp COMMND RETURN: jsr SENDDS lda #$00 sta CRITIC ldy STATUS sty DSTATS rts WAIT: lda #$00 sta ERRFLG clc lda #$3E sta BUFRLO adc #$01 sta BFENLO lda #$02 sta BUFRHI sta BFENHI lda #$FF sta NOCKSM jsr RECEIV ldy #$FF lda STATUS cmp #$01 bne NWOK lda TEMP cmp #$41 beq GOOD cmp #$43 beq GOOD cmp #$45 bne NOTDER lda #$90 sta STATUS bne NWOK NOTDER: lda #$8B sta STATUS NWOK: lda STATUS cmp #$8A beq BAD lda #$FF sta ERRFLG bne GOOD BAD: ldy #$00 GOOD: lda STATUS sta TSTAT rts SEND: lda #$01 sta STATUS jsr SENDEN ldy #$00 sty CHKSUM sty CHKSNT sty XMTDON lda (BUFRLO),y sta $D20D sta CHKSUM NOTDON: lda BRKKEY bne NTBRK0 jmp BROKE NTBRK0: lda XMTDON beq NOTDON jsr SENDDS rts ISRODN: tya pha inc BUFRLO bne NOWRPO inc BUFRHI NOWRPO: lda BUFRLO cmp BFENLO lda BUFRHI sbc BFENHI bcc NOTEND lda CHKSNT bne RELONE lda CHKSUM sta $D20D lda #$FF sta CHKSNT bne CHKDON RELONE: lda POKMSK ora #$08 sta POKMSK sta IRQEN CHKDON: pla tay pla rti NOTEND: ldy #$00 lda (BUFRLO),y sta $D20D clc adc CHKSUM adc #$00 sta CHKSUM jmp CHKDON ISRTD: lda CHKSNT beq FOOEY sta XMTDON lda POKMSK and #$F7 sta POKMSK sta IRQEN FOOEY: pla rti RECEIV: lda #$00 ldy CASFLG bne NOCLR sta CHKSUM NOCLR: sta BUFRFL sta RECVDN lda #$01 sta STATUS jsr RECVEN lda #$3C sta PBCTL CHKTIM: lda BRKKEY bne NTBRK1 jmp BROKE NTBRK1: lda TIMFLG beq TOUT lda RECVDN beq CHKTIM GOBACK: rts TOUT: lda #$8A sta STATUS RRETRN: rts ISRSIR: tya pha lda SKCTL sta RANDOM bmi NTFRAM ldy #$8C sty STATUS NTFRAM: and #$20 bne NTOVRN ldy #$8E sty STATUS NTOVRN: lda BUFRFL beq NOTYET lda $D20D cmp CHKSUM beq SRETRN ldy #$8F sty STATUS SRETRN: lda #$FF sta RECVDN SUSUAL: pla tay pla rti NOTYET: lda $D20D ldy #$00 sta (BUFRLO),y clc adc CHKSUM adc #$00 sta CHKSUM inc BUFRLO bne NTWRP1 inc BUFRHI NTWRP1: lda BUFRLO cmp BFENLO lda BUFRHI sbc BFENHI bcc SUSUAL lda NOCKSM beq GOON lda #$00 sta NOCKSM beq SRETRN GOON: lda #$FF sta BUFRFL bne SUSUAL LDPNTR: clc lda DBUFLO sta BUFRLO adc DBYTLO sta BFENLO lda DBUFHI sta BUFRHI adc DBYTHI sta BFENHI rts CASENT: lda DSTATS bpl CASRED lda #$CC sta $D204 lda #$05 sta $D206 jsr SENDEN ldy #$0F lda DAUX2 bmi SRTIRO ldy #$B4 SRTIRO: ldx #$00 jsr SETVBX lda #$34 sta PACTL TIMIT: lda TIMFLG bne TIMIT jsr LDPNTR jsr SEND jmp CRETRN CASRED: lda #$FF sta CASFLG ldy #$0A lda DAUX2 bmi SRTIR1 ldy #$78 SRTIR1: ldx #$00 jsr SETVBX lda #$34 sta PACTL TIMIT1: lda TIMFLG bne TIMIT1 jsr LDPNTR jsr STTMOT jsr SETVBX jsr BEGIN jsr RECEIV CRETRN: lda DAUX2 bmi SRTIR2 lda #$3C sta PACTL SRTIR2: jmp RETURN lda #$00 sta TIMFLG rts SENDEN: lda #$07 and SSKCTL ora #$20 ldy DDEVIC cpy #$60 bne NOTCAS ora #$08 ldy #$07 sty $D202 ldy #$05 sty AUDF1 NOTCAS: sta SSKCTL sta SKCTL lda #$C7 and POKMSK ora #$10 jmp CONTIN RECVEN: lda #$07 and SSKCTL ora #$10 sta SSKCTL sta SKCTL sta RANDOM lda #$C7 and POKMSK ora #$20 CONTIN: sta POKMSK sta IRQEN lda #$28 sta AUDCTL ldx #$06 lda #$A8 ldy SOUNDR bne NOISE1 lda #$A0 NOISE1: sta AUDC1,x dex dex bpl NOISE1 lda #$A0 sta $D205 ldy DDEVIC cpy #$60 beq CAS31 sta AUDC1 sta $D203 CAS31: rts SENDDS: nop RECVDS: lda #$C7 and POKMSK sta POKMSK sta IRQEN ldx #$06 lda #$00 ZERIT: sta AUDC1,x dex dex bpl ZERIT rts STTMOT: lda DTIMLO ror a ror a tay and #$3F tax tya ror a and #$C0 tay rts .addr ISRSIR .addr ISRODN .addr ISRTD SENDIN: ldx #$01 DELAY0: ldy #$FF DELAY1: dey bne DELAY1 dex bne DELAY0 jsr SEND ldy #$02 ldx #$00 WAITER: jsr SETVBX jsr WAIT tya rts COMPUT: sta TIMER2 sty $0311 jsr ADJUST sta TIMER2 lda TIMER1 jsr ADJUST sta TIMER1 lda TIMER2 sec sbc TIMER1 sta TEMP1 lda $0311 sec sbc $030D tay lda #$7D HITIMR: clc adc #$83 dey bpl HITIMR clc adc TEMP1 FINDX: tay lsr a lsr a lsr a asl a sec sbc #$16 tax tya and #$07 tay lda #$F5 DOINTP: clc adc #$0B dey bpl DOINTP ENINTP: ldy #$00 sty ADDCOR sec sbc #$07 bpl PLUS dec ADDCOR PLUS: clc adc POKTAB,x tay lda ADDCOR adc POKTAB+1,x rts ADJUST: cmp #$7C bmi ADJ1 sec sbc #$7C rts ADJ1: clc adc #$07 rts BEGIN: lda BRKKEY bne NTBRK2 jmp BROKE NTBRK2: sei lda TIMFLG bne OKTIM1 beq TOUT1 OKTIM1: lda SKCTL and #$10 bne BEGIN sta SAVIO ldx VCOUNT ldy $14 stx TIMER1 sty $030D ldx #$01 stx TEMP3 ldy #$0A COUNT: lda BRKKEY beq BROKE lda TIMFLG bne OKTIMR TOUT1: cli jmp TOUT OKTIMR: lda SKCTL and #$10 cmp SAVIO beq COUNT sta SAVIO dey bne COUNT dec TEMP3 bmi GOREAD lda VCOUNT ldy $14 jsr COMPUT sty CBAUDL sta $02EF ldy #$09 bne COUNT GOREAD: lda CBAUDL sta $D204 lda $02EF sta $D206 lda #$00 sta SKCTL lda SSKCTL sta SKCTL lda #$55 sta (BUFRLO),y iny sta (BUFRLO),y lda #$AA sta CHKSUM clc lda BUFRLO adc #$02 sta BUFRLO lda BUFRHI adc #$00 sta BUFRHI cli rts BROKE: jsr SENDDS lda #$3C sta PACTL sta PBCTL lda #$80 sta STATUS ldx STACKP txs dec BRKKEY cli jmp RETURN SETVBX: lda #$EC sta CDTMA1 lda #$EB sta $0227 lda #$01 sei jsr LE45C lda #$01 sta TIMFLG cli rts ; words, not labels! ; AUF+7 BAUD RATE VCOUNT INTERVAL ; ----- --------- --------------- ; ; ; ; ; POKTAB: .word $3E8 ; .word $443 ; .word $49E ; .word $4F9 ; .word $554 ; .word $5AF ; .word $60A ; .word $665 ; .word $6C0 ; .word $71A ; .word $775 ; .word $7D0 ; bit $85 DINIT: lda #$A0 sta DSKTIM rts DSKIF: lda #$31 sta DDEVIC lda DSKTIM ldx DCOMND cpx #$21 beq PUTDTO lda #$07 PUTDTO: sta DTIMLO ldx #$40 ldy #$80 lda DCOMND cmp #$57 bne CKSTC ldx #$80 CKSTC: cmp #$53 bne PUTCNT lda #$EA sta DBUFLO lda #$02 sta DBUFHI ldy #$04 PUTCNT: stx DSTATS sty DBYTLO lda #$00 sta DBYTHI jsr SIOV bpl GOODST rts GOODST: lda DCOMND cmp #$53 bne PUTBC jsr PUTADR ldy #$02 lda (BUFADR),y sta DSKTIM PUTBC: lda DCOMND cmp #$21 bne ENDDIF FMTD: jsr PUTADR ldy #$FE TWICE: iny iny RDBAD: lda (BUFADR),y cmp #$FF bne TWICE iny lda (BUFADR),y iny cmp #$FF bne RDBAD dey dey sty DBYTLO lda #$00 sta DBYTHI ENDDIF: ldy DSTATS rts PUTADR: lda DBUFLO sta BUFADR lda DBUFHI sta $16 rts CASORG: lda #$1E sta PTIMOT rts PHSTLO: nop LEE7E: .byte $02 PHCHLO: .byte $C0 LEE80: .byte $03 PHSTAT: lda #$04 sta PBUFSZ ldx PHSTLO ldy LEE7E lda #$53 sta DCOMND sta DAUX1 jsr SETDCB jsr SIOV bmi BADST jsr PHPUT BADST: rts PHOPEN: jsr PHSTAT lda #$00 sta PBPNT rts PHWRIT: sta PTEMP jsr PRMODE ldx PBPNT lda PTEMP sta PRNBUF,x inx cpx PBUFSZ beq BUFFUL stx PBPNT cmp #$9B beq BLFILL ldy #$01 rts BLFILL: lda #$20 FILLBF: sta PRNBUF,x inx cpx PBUFSZ bne FILLBF BUFFUL: lda #$00 sta PBPNT ldx PHCHLO ldy LEE80 jsr SETDCB jsr SIOV PHCLOS: rts jsr PRMODE ldx PBPNT bne BLFILL ldy #$01 rts SETDCB: stx DBUFLO sty DBUFHI lda #$40 sta DDEVIC lda #$01 sta DUNIT lda #$80 ldx DCOMND cpx #$53 bne PSIOC lda #$40 PSIOC: sta DSTATS lda PBUFSZ sta DBYTLO lda #$00 sta DBYTHI lda PTIMOT sta DTIMLO rts PHPUT: lda $02EC sta PTIMOT rts PRMODE: ldy #$57 lda ICAX2Z CMODE: cmp #$4E bne CDUBL ldx #$28 bne SETBSZ CDUBL: cmp #$44 bne CSIDE ldx #$14 bne SETBSZ CSIDE: cmp #$53 bne GOERR ldx #$1D SETBSZ: stx PBUFSZ sty DCOMND sta DAUX1 rts GOERR: lda #$4E bne CMODE INIT: lda #$CC sta CBAUDL lda #$05 .byte $8D .byte $EF .byte $02 SPECIAL:rts OPENC: lda ICAX2Z sta FTYPE lda ICAX1Z and #$0C cmp #$04 beq OPINP cmp #$08 beq OPOUT rts OPINP: lda #$00 sta WMODE sta FEOF SFH: lda #$01 jsr BEEP bmi OPNRTN lda #$34 sta PACTL ldy #$40 ldx #$02 lda #$03 sta CDTMF3 jsr LE45C WAITM: lda CDTMF3 bne WAITM lda #$80 sta BPTR sta BLIM jmp OPOK PBRK: ldy #$80 dec BRKKEY OPNRTN: lda #$00 sta WMODE rts OPOUT: lda #$80 sta WMODE lda #$02 jsr BEEP bmi OPNRTN lda #$CC sta $D204 lda #$05 sta $D206 lda #$60 sta DDEVIC jsr LE468 lda #$34 sta PACTL lda #$03 ldx #$04 ldy #$80 jsr LE45C lda #$FF sta CDTMF3 WDLR: lda BRKKEY beq PBRK lda CDTMF3 bne WDLR lda #$00 sta BPTR OPOK: ldy #$01 LEFD5: rts GBYTE: lda FEOF bmi ISEOF ldx BPTR cpx BLIM beq RBLOK lda $0400,x inc BPTR ldy #$01 GBX: rts RBLOK: lda #$52 jsr SIOSB tya bmi GBX lda #$00 sta BPTR ldx #$80 lda $03FF cmp #$FE beq ATEOF cmp #$FA bne NLR ldx $047F NLR: stx BLIM jmp GBYTE ATEOF: dec FEOF ISEOF: ldy #$88 LF00F: rts PBYTE: ldx BPTR sta $0400,x inc BPTR ldy #$01 cpx #$7F beq LF01E rts LF01E: lda #$FC jsr WSIOB lda #$00 sta BPTR rts STATU: ldy #$01 rts CLOSEC: lda WMODE bmi CLRWT ldy #$01 FCAX: lda #$3C sta PACTL rts CLRWT: ldx BPTR beq WTLR stx $047F lda #$FA jsr WSIOB bmi FCAX WTLR: ldx #$7F lda #$00 ZTBUF: sta $0400,x dex bpl ZTBUF lda #$FE jsr WSIOB jmp FCAX BEEP: sta FREQ BEEP1: lda $14 clc adc #$1E tax WFL: lda #$FF sta CONSOL lda #$00 ldy #$F0 LF069: dey bne LF069 sta CONSOL ldy #$F0 LF071: dey bne LF071 cpx $14 bne WFL dec FREQ beq WFAK txa clc adc #$0A tax LF081: cpx $14 bne LF081 beq BEEP1 WFAK: jsr WFAK1 tya rts WFAK1: lda KEYBDV+5 pha lda KEYBDV+4 pha rts SIOSB: sta DCOMND lda #$00 sta DBYTHI lda #$83 sta DBYTLO lda #$03 sta DBUFHI lda #$FD sta DBUFLO CSIO: lda #$60 sta DDEVIC lda #$00 sta DUNIT lda #$23 sta DTIMLO lda DCOMND ldy #$40 cmp #$52 beq LF0C6 ldy #$80 LF0C6: sty DSTATS lda FTYPE sta DAUX2 jsr SIOV rts WSIOB: sta $03FF lda #$55 sta CASBUF sta $03FE lda #$57 jsr SIOSB rts TBLENT: .byte $50,$30,$E4,$43,$40,$E4,$45,$00 .byte $E4,$53,$10,$E4,$4B,$20,$E4 IDENT: .byte $7D,$41,$54,$41,$52,$49,$20,$43 .byte $4F,$4D,$50,$55,$54,$45,$52,$20 .byte $2D,$20,$4D,$45,$4D,$4F,$20,$50 .byte $41,$44,$9B DERR5: .byte $42,$4F,$4F,$54,$20,$45,$52,$52 .byte $4F,$52,$9B OPNEDT: .byte $45,$3A,$9B RESET: sei lda COLDST bne PWRUP lda #$FF bne LF128 PWRUP: sei lda #$00 LF128: sta WARMST cld ldx #$FF txs jsr LF244 jsr HARDI lda WARMST bne ZOSRAM ZERORM: lda #$00 ldy #$08 sta RAMLO sta $05 CLRRAM: sta (RAMLO),y iny cpy #$00 bne CLRRAM inc $05 ldx $05 cpx TRAMSZ bne CLRRAM lda LE472 sta DOSVEC lda LE473 sta $0B lda #$FF sta COLDST bne ESTSCM ZOSRAM: ldx #$00 txa ZOSRM2: sta VDSLST,x sta DDEVIC,x dex bne ZOSRM2 ldx #$10 ZOSRM3: sta LINZBS,x inx bpl ZOSRM3 ESTSCM: lda #$02 sta LMARGN lda #$27 sta RMARGN OPSYS: ldx #$25 MOVVEC: lda VCTABL,x sta VDSLST,x dex bpl MOVVEC jsr OSRAM cli ldx #$0E NXTENT: lda TBLENT,x sta HATABS,x dex bpl NXTENT ldx #$00 stx TSTDAT stx TRAMSZ ldx RAMSIZ cpx #$90 bcs ENDBCK lda $9FFC bne ENDBCK inc TSTDAT jsr CBINI ENDBCK: ldx RAMSIZ cpx #$B0 bcs ENDACK ldx $BFFC bne ENDACK inc TRAMSZ jsr CAINI ENDACK: lda #$03 ldx #$00 sta ICCOM,x lda #$18 sta ICBAL,x lda #$F1 sta ICBAH,x lda #$0C sta ICAX1,x jsr CIOV bpl SCRNOK jmp PWRUP SCRNOK: inx bne SCRNOK iny bpl SCRNOK jsr CSBOOT lda TRAMSZ ora TSTDAT beq NOCART lda TRAMSZ beq NOA1 lda $BFFD NOA1: ldx TSTDAT beq NOB1 ora $9FFD NOB1: and #$01 beq NOBOOT NOCART: jsr BOOT NOBOOT: lda #$00 sta COLDST lda TRAMSZ beq NOA2 lda $BFFD and #$04 beq NOA2 jmp (LBFFA) NOA2: lda TSTDAT beq NOCAR2 lda $9FFD and #$04 beq NOCART jmp (L9FFA) NOCAR2: jmp (DOSVEC) SIGNON: ldx #$F2 ldy #$F0 jsr PUTLIN BALCKB: jsr BLKB2 jmp BALCKB BLKB2: lda EDITRV+5 pha lda EDITRV+4 pha rts CAINI: jmp (LBFFE) CBINI: jmp (L9FFE) SPECL: cmp #$D0 bne HOWMCH LF243: rts LF244: inc $BFFC lda $BFFC bne ENSPEC lda $BFFD bpl ENSPEC jmp (LBFFE) ENSPEC: dec $BFFC ENSPE2: ldy #$00 sty $05 lda #$10 sta TRAMSZ HOWMCH: lda ($05),y eor #$FF sta ($05),y cmp ($05),y bne LF243 eor #$FF sta ($05),y lda TRAMSZ clc adc #$10 sta TRAMSZ .byte $4C .byte $3F ENDRAM: .byte $F2 HARDI: lda #$00 tax CLRCHP: sta HPOSP0,x sta DMACTL,x sta AUDF1,x nop nop nop inx bne CLRCHP rts OSRAM: dec BRKKEY lda #$54 sta BRKKY lda #$E7 sta $0237 lda TRAMSZ sta RAMSIZ sta $02E6 lda #$00 sta MEMTOP lda #$00 sta MEMLO lda #$07 sta $02E8 jsr LE40C jsr LE41C jsr LE42C jsr PRINTV+12 jsr LE44C jsr LE46E jsr LE465 jsr LE46B lda CONSOL and #$01 bne NOKEY inc CKEY NOKEY: rts BOOT: lda WARMST beq NOWARM lda BOOT_OK and #$01 beq NOINIT jsr DINI NOINIT: rts NOWARM: lda #$01 sta DUNIT lda #$53 sta DCOMND jsr DSKINV bpl DOOBOOT rts DOOBOOT:lda #$00 sta DAUX2 lda #$01 sta DAUX1 lda #$00 sta DBUFLO lda #$04 sta DBUFHI SECT1: jsr GETSEC bpl ALLSEC BADDSK: jsr DSKRDE lda CASSBT beq DOOBOOT rts ALLSEC: ldx #$03 RDBYTE: lda $0400,x sta DFLAGS,x dex bpl RDBYTE lda BOOTAD sta RAMLO lda $0243 sta $05 lda $0404 sta DOSINI lda $0405 sta $0D MVBUFF: ldy #$7F MVNXB: lda $0400,y sta (RAMLO),y dey bpl MVNXB clc lda RAMLO adc #$80 sta RAMLO lda $05 adc #$00 sta $05 dec DBSECT beq ENBOOT inc DAUX1 SECTX: jsr GETSEC bpl MVBUFF jsr DSKRDE lda CASSBT bne BADDSK beq SECTX ENBOOT: lda CASSBT beq XBOOT jsr GETSEC XBOOT: jsr BLOAD bcs BADDSK jsr DINI inc BOOT_OK rts BLOAD: clc lda BOOTAD adc #$06 sta RAMLO lda $0243 adc #$00 sta $05 jmp (RAMLO) DINI: jmp (DOSINI) DSKRDE: ldx #$0D ldy #$F1 PUTLIN: txa ldx #$00 sta ICBAL,x tya sta ICBAH,x lda #$09 sta ICCOM,x lda #$FF sta ICBLL,x jsr CIOV rts GETSEC: lda CASSBT beq DISKM jmp LE47A DISKM: lda #$52 sta DCOMND lda #$01 sta DUNIT jsr DSKINV rts CSBOOT: lda WARMST beq CSBOT2 lda BOOT_OK and #$02 beq NOCSB2 jsr CINI NOCSB2: rts CSBOT2: lda CKEY beq NOCSBT lda #$80 sta FTYPE inc CASSBT jsr LE47D jsr SECT1 lda #$00 sta CASSBT sta CKEY asl BOOT_OK lda DOSINI sta CASINI lda $0D sta $03 NOCSBT: rts CINI: jmp (CASINI) KBDORG: lda #$FF sta FILDAT lda $02E6 and #$F0 sta RAMTOP lda #$40 .byte $8D .byte $BE PWRONA: .byte $02 rts DOPEN: lda ICAX2Z and #$0F .byte $D0 php EOPEN: lda ICAX1Z and #$0F sta ICAX1Z lda #$00 OPNCOM: sta DINDEX lda #$E0 sta CHBAS lda #$02 sta CHACT sta SDMCTL lda #$01 sta DSTAT lda #$C0 ora POKMSK sta POKMSK sta IRQEN lda #$00 sta TINDEX sta $64 sta SWPFLG sta CRSINH ldy #$0E lda #$01 CLRTBS: sta TABMAP,y dey bpl CLRTBS ldx #$04 LF438: lda COLRTB,x sta COLOR0,x dex bpl LF438 ldy RAMTOP dey sty $0295 lda #$60 sta TXTMSC ldx DINDEX lda ANCONV,x bne LF457 OPNERR: lda #$91 sta DSTAT LF457: sta HOLD1 lda RAMTOP sta $65 ldy ALOCAT,x DOPEN1: lda #$28 jsr DBSUB dey bne DOPEN1 lda GTIA and #$3F sta $67 tay cpx #$08 bcc NOT8 txa ror a ror a ror a and #$C0 ora $67 tay lda #$10 jsr DBSUB cpx #$0B bne NOT8 lda #$06 sta $02C8 NOT8: sty GTIA lda $64 sta SAVMSC lda $65 sta $59 VBWAIT: lda VCOUNT cmp #$7A bne VBWAIT jsr DBDEC lda PAGETB,x beq NOMOD lda #$FF sta $64 dec $65 NOMOD: lda $64 sta SAVADR lda $65 sta $69 jsr DBDDEC lda #$41 jsr STORE stx MLTTMP lda #$18 sta BOTSCR lda DINDEX cmp #$09 bcs NOTMXD lda ICAX1Z and #$10 beq NOTMXD lda #$04 sta BOTSCR ldx #$02 DOPEN2: lda #$02 jsr STORE dex bpl DOPEN2 ldy RAMTOP dey tya jsr STORE lda #$60 jsr STORE lda #$42 jsr STORE clc lda #$0C adc MLTTMP sta MLTTMP NOTMXD: ldy MLTTMP ldx NUMDLE,y DOPEN3: lda HOLD1 jsr STORE dex bne DOPEN3 lda DINDEX cmp #$08 bcc DOPEN5 ldx #$5D lda RAMTOP sec sbc #$10 jsr STORE lda #$00 jsr STORE lda #$4F jsr STORE DOPEN4: lda HOLD1 jsr STORE dex bne DOPEN4 DOPEN5: lda $59 jsr STORE lda SAVMSC jsr STORE lda HOLD1 ora #$40 jsr STORE lda #$70 jsr STORE lda #$70 jsr STORE lda $64 sta SDLSTL lda $65 sta $0231 lda #$70 jsr STORE lda $64 sta MEMTOP lda $65 sta $02E6 lda SAVADR sta $64 lda $69 sta $65 lda $0231 jsr STORE lda SDLSTL jsr STORE lda DSTAT bpl DOPEN9 pha jsr EOPEN pla tay rts DOPEN9: lda ICAX1Z and #$20 bne DOPEN7 jsr CLRSCR sta TXTROW lda LMARGN sta TXTCOL DOPEN7: lda #$22 ora SDMCTL sta SDMCTL .byte $4C .byte $21 .byte $F6 GETCH: jsr RANGE jsr GETPLT jsr INATAC jsr INCRSB jmp RETUR1 GETPLT: jsr CONVRT lda ($64),y and DMASK SHIFTD: lsr SHFAMT bcs SHIFT1 lsr a bpl SHIFTD SHIFT1: sta CHAR cmp #$00 rts OUTCH: sta ATACHR jsr RANGE OUTCHA: lda ATACHR cmp #$7D bne OUTCHE jsr CLRSCR jmp RETUR2 OUTCHE: lda ATACHR cmp #$9B bne OUTCHB jsr DOCRWS jmp RETUR2 OUTCHB: jsr OUTPLT jsr INCRSR jmp RETUR2 OUTPLT: lda SSFLAG bne OUTPLT ldx #$02 CRLOOP: lda ROWCRS,x sta OLDROW,x dex bpl CRLOOP lda ATACHR tay rol a rol a rol a rol a and #$03 tax tya and #$9F ora ATAINT,x OUTCH2: sta CHAR jsr CONVRT lda CHAR SHIFTV: lsr SHFAMT bcs SHIFT2 asl a jmp SHIFTV SHIFT2: and DMASK sta TMPCHR lda DMASK eor #$FF and ($64),y ora TMPCHR sta ($64),y rts RETUR2: jsr GETPLT sta OLDCHR ldx DINDEX bne RETUR1 ldx CRSINH bne RETUR1 eor #$80 .byte $20 .byte $FF .byte $F5 RETUR1: ldy DSTAT lda #$01 sta DSTAT .byte $AD .byte $FB .byte $02 NOFUNC: rts EGETCH: jsr SWAP jsr ERANGE lda BUFCNT bne EGETC3 lda ROWCRS sta BUFSTR lda COLCRS sta $6D EGETC1: jsr KGETCH sty DSTAT lda ATACHR cmp #$9B beq EGETC2 jsr DOSS jsr SWAP lda LOGCOL cmp #$71 bne EGETC6 jsr BELL EGETC6: jmp EGETC1 EGETC2: jsr OFFCRS jsr DOBUFC lda BUFSTR sta ROWCRS lda $6D sta COLCRS EGETC3: lda BUFCNT beq EGETC5 EGETC7: dec BUFCNT beq EGETC5 lda DSTAT bmi EGETC7 jsr GETCH sta ATACHR jmp SWAP EGETC5: jsr DOCRWS lda #$9B sta ATACHR jsr RETUR2 sty DSTAT jmp SWAP JSRIND: .byte $6C .byte $64 EOUTCH: brk sta ATACHR jsr SWAP jsr ERANGE DOSS: jsr OFFCRS jsr TSTCTL beq ERETN EOUTC6: asl ESCFLG jsr OUTCHE jmp SWAP ERETN: lda DSPFLG ora ESCFLG bne EOUTC6 asl ESCFLG inx lda CNTRLS,x sta $64 lda LFEC7,x sta $65 jsr JSRIND jsr RETUR2 jmp SWAP EOUTC5: lda #$FF .byte $8D .byte $FC KGETC2: .byte $02 KGETCH: lda ICAX1Z lsr a bcs GETOUT lda #$80 ldx BRKKEY beq K7 lda FILDAT cmp #$FF beq KGETCH sta HOLDCH ldx #$FF stx FILDAT jsr CLICK KGETC3: tax cpx #$C0 bcc ASCC01 ldx #$03 ASCC01: lda ATASCI,x sta ATACHR cmp #$80 beq EOUTC5 cmp #$81 bne KGETC1 lda INVFLG eor #$80 sta INVFLG jmp EOUTC5 KGETC1: cmp #$82 bne K1 lda #$00 sta SHFLOK beq EOUTC5 K1: cmp #$83 bne K2 lda #$40 sta SHFLOK bne EOUTC5 K2: cmp #$84 bne K3 lda #$80 sta SHFLOK bne EOUTC5 K3: cmp #$85 bne K6 lda #$88 K7: sta DSTAT sta BRKKEY GETOUT: lda #$9B bne K8 K6: lda HOLDCH cmp #$40 bcs K5 lda ATACHR cmp #$61 bcc K5 cmp #$7B bcs K5 lda SHFLOK beq K5 ora HOLDCH jmp KGETC3 K5: jsr TSTCTL beq K4 lda ATACHR eor INVFLG K8: sta ATACHR K4: jmp RETUR1 lda #$80 sta ESCFLG rts CRSRUP: dec ROWCRS bpl COMRET ldx BOTSCR dex VPDNCM: stx ROWCRS COMRET: jmp STRBEG inc ROWCRS lda ROWCRS cmp BOTSCR bcc COMRET ldx #$00 beq VPDNCM CRSRLF: dec COLCRS lda COLCRS bmi CRSRL1 cmp LMARGN bcs COMRE1 CRSRL1: lda RMARGN LFRTCM: sta COLCRS COMRE1: jmp DOLCOL CRSRRT: inc COLCRS lda COLCRS cmp RMARGN bcc COMRE1 beq COMRE1 lda LMARGN jmp LFRTCM CLRSCR: jsr PUTMSC ldy #$00 tya CLRSC2: sta ($64),y iny bne CLRSC2 inc $65 ldx $65 cpx RAMTOP bcc CLRSC2 lda #$FF CLRSC3: sta LOGMAP,y iny cpy #$04 bcc CLRSC3 HOME: jsr COLCR sta LOGCOL sta $6D lda #$00 sta ROWCRS sta $56 sta BUFSTR rts lda LOGCOL cmp LMARGN beq BS1 lda COLCRS cmp LMARGN bne BS3 jsr DELTIM BS3: jsr CRSRLF lda COLCRS cmp RMARGN bne BS2 lda ROWCRS beq BS2 jsr CRSRUP BS2: lda #$20 sta ATACHR jsr OUTPLT BS1: jmp DOLCOL TAB: jsr CRSRRT lda COLCRS cmp LMARGN bne TAB1 jsr DOCR jsr LOGGET bcc TAB1 bcs TAB2 TAB1: lda LOGCOL jsr BITGET bcc TAB TAB2: jmp DOLCOL lda LOGCOL jmp BITSET lda LOGCOL jmp BITCLR jsr PHACRS jsr GETPLT sta INSDAT lda #$00 sta SCRFLG INSCH4: jsr OUTCH2 lda LOGCOL pha jsr INCRSA pla cmp LOGCOL bcs INSCH3 INSCH1: lda INSDAT pha jsr GETPLT sta INSDAT pla jmp INSCH4 INSCH3: jsr PLACRS INSCH6: dec SCRFLG bmi INSCH5 dec ROWCRS bne INSCH6 INSCH5: jmp DOLCOL jsr PHACRS DELCH1: jsr CONVRT lda $64 sta SAVADR lda $65 sta $69 lda LOGCOL pha jsr INCRSB pla cmp LOGCOL bcs DELCH2 lda ROWCRS cmp BOTSCR bcs DELCH2 jsr GETPLT ldy #$00 sta (SAVADR),y beq DELCH1 DELCH2: ldy #$00 tya sta (SAVADR),y jsr DELTIA jsr PLACRS jmp DOLCOL INSLIN: sec INSLIA: jsr EXTEND lda LMARGN sta COLCRS jsr CONVRT lda $64 sta SAVADR clc adc #$28 sta MLTTMP lda $65 sta $69 adc #$00 sta $67 ldx ROWCRS cpx #$17 beq INSLI2 INSLI1: jsr MOVLIN inx cpx #$17 bne INSLI1 INSLI2: jsr CLRLIN jmp DOLCOL DELLIN: jsr DOLCOL DELLIA: ldy HOLD1 sty ROWCRS DELLIB: ldy ROWCRS DELLI1: tya sec jsr LO2GET php tya clc adc #$78 plp jsr BITPUT iny cpy #$18 bne DELLI1 lda $02B4 ora #$01 sta $02B4 DELLI2: lda LMARGN sta COLCRS jsr CONVRT jsr SCROL1 jsr LOGGET bcc DELLIB jmp DOLCOL BELL: rts .byte $20 BELL1: jsr CLICK dey bpl BELL1 rts DBDDEC: lda #$02 bne DBSUB STORE: ldy DSTAT bmi STROK ldy #$00 STORE1: sta ($64),y DBDEC: lda #$01 DBSUB: sta SUBTMP lda DSTAT bmi STROK lda $64 sec sbc SUBTMP sta $64 bcs DBSUB1 dec $65 DBSUB1: lda $0F cmp $65 bcc STROK bne STRERR lda APPMHI cmp $64 bcc STROK STRERR: lda #$93 sta DSTAT STROK: rts CONVRT: lda ROWCRS pha lda COLCRS pha lda $56 pha jsr PUTMSC lda ROWCRS sta MLTTMP lda #$00 sta $67 lda MLTTMP asl a rol $67 sta HOLD1 ldy $67 sty HOLD2 asl a rol $67 asl a rol $67 clc adc HOLD1 sta MLTTMP lda $67 adc HOLD2 sta $67 ldx DINDEX ldy DHLINE,x CONVR1: dey bmi CONVR2 asl MLTTMP rol $67 jmp CONVR1 CONVR2: ldy DIV2TB,x lda COLCRS ldx #$07 CONVR3: dey bmi CONVR4 dex lsr $56 ror a ror TMPLBT jmp CONVR3 CONVR4: iny clc adc MLTTMP sta MLTTMP bcc CONVR5 inc $67 CONVR5: sec CONVR6: ror TMPLBT clc dex bpl CONVR6 ldx TMPLBT lda MLTTMP clc adc $64 sta $64 sta OLDADR lda $67 adc $65 sta $65 sta $5F lda DMASKT,x sta DMASK sta SHFAMT pla sta $56 pla sta COLCRS pla sta ROWCRS rts INCRSB: lda #$00 beq INCRSC INCRSR: lda #$9B INCRSC: sta INSDAT INCRSA: inc LOGCOL inc COLCRS bne INCRS2 inc $56 INCRS2: lda COLCRS ldx DINDEX cmp COLUMN,x beq INC2A cpx #$00 bne INCRS3 cmp RMARGN beq INCRS3 bcs INC2A INCRS3: rts INC2A: cpx #$08 bcc DOCR1 lda $56 beq INCRS3 DOCR1: lda DINDEX bne DOCR lda LOGCOL cmp #$51 bcc DOCR1B lda INSDAT beq DOCR jsr DOCRWS jmp INCRS1 DOCR1B: jsr DOCR lda ROWCRS clc adc #$78 jsr BITGET bcc DOCR1A lda INSDAT beq DOCR1A clc jsr INSLIA DOCR1A: jmp DOLCOL NOSCRL: lda #$00 beq NOSCR1 DOCRWS: lda #$9B NOSCR1: sta INSDAT DOCR: jsr COLCR lda #$00 sta $56 inc ROWCRS DOCR2: ldx DINDEX ldy #$18 bit SWPFLG bpl DOCR2A ldy #$04 tya bne DOCR2B DOCR2A: lda NOROWS,x DOCR2B: cmp ROWCRS bne INCRS1 sty $029D txa bne INCRS1 lda INSDAT beq INCRS1 cmp #$9B sec beq DOCR4B clc DOCR4B: jsr SCROLL inc SCRFLG dec BUFSTR dec $029D lda LOGMAP sec bpl DOCR4B lda $029D sta ROWCRS INCRS1: jmp DOLCOL SUBEND: sec lda ROWAC,x sbc ENDPT sta ROWAC,x lda $71,x sbc $75 sta $71,x rts ERANGE: lda BOTSCR cmp #$04 beq RANGE lda DINDEX beq RANGE jsr EOPEN RANGE: lda #$27 cmp RMARGN bcs RANGE3 sta RMARGN RANGE3: ldx DINDEX lda NOROWS,x cmp ROWCRS bcc RNGERR beq RNGERR cpx #$08 bne RANGE1 lda $56 beq RNGOK cmp #$01 bne RNGERR beq RANGE2 RANGE1: lda $56 bne RNGERR RANGE2: lda COLUMN,x cmp COLCRS bcc RNGERR beq RNGERR RNGOK: lda #$01 sta DSTAT lda #$80 ldx BRKKEY sta BRKKEY beq RNGER2 rts RNGERR: jsr HOME lda #$8D RNGER2: sta DSTAT RNGER1: pla pla lda SWPFLG bpl RETUR3 jsr SWAPA RETUR3: jmp RETUR1 OFFCRS: ldy #$00 lda OLDCHR sta (OLDADR),y rts BITCON: pha and #$07 tax lda MASKTB,x sta BITMSK pla lsr a lsr a lsr a tax rts BITROL: rol $02B4 rol $02B3 rol LOGMAP rts BITPUT: bcc BITCLR BITSET: jsr BITCON lda TABMAP,x ora BITMSK sta TABMAP,x rts BITCLR: jsr BITCON lda BITMSK eor #$FF and TABMAP,x sta TABMAP,x rts LOGGET: lda ROWCRS LO1GET: clc LO2GET: adc #$78 BITGET: jsr BITCON clc lda TABMAP,x and BITMSK beq BITGE1 sec BITGE1: rts INATAC: lda CHAR ldy DINDEX cpy #$03 bcs INATA1 rol a rol a rol a rol a and #$03 tax lda CHAR and #$9F ora INTATA,x INATA1: sta ATACHR rts MOVLIN: lda #$02 sta $65 lda #$47 sta $64 ldy #$27 MOVLI1: lda (MLTTMP),y sta TMPCHR lda (SAVADR),y sta (MLTTMP),y lda TMPCHR sta ($64),y dey bpl MOVLI1 lda $65 sta $69 lda $64 sta SAVADR clc lda MLTTMP adc #$28 sta MLTTMP bcc MOVLI2 inc $67 MOVLI2: rts EXTEND: php ldy #$17 EXTEN1: tya jsr LO1GET php tya clc adc #$79 plp jsr BITPUT EXTEN3: dey bmi EXTEN4 cpy ROWCRS bcs EXTEN1 EXTEN4: lda ROWCRS clc adc #$78 plp jmp BITPUT CLRLIN: lda LMARGN sta COLCRS jsr CONVRT ldy #$27 lda #$00 CLRI1: sta ($64),y dey bpl CLRI1 rts SCROLL: jsr BITROL lda SAVMSC sta $64 lda $59 sta $65 SCROL1: ldy #$28 lda ($64),y ldx RAMTOP dex cpx $65 bne SCROL2 ldx #$D7 cpx $64 bcs SCROL2 lda #$00 SCROL2: ldy #$00 sta ($64),y inc $64 bne SCROL1 inc $65 lda $65 cmp RAMTOP bne SCROL1 jmp DOLCOL DOLCOL: lda #$00 sta LOGCOL lda ROWCRS sta HOLD1 DOLCO1: lda HOLD1 jsr LO1GET bcs DOLCO2 lda LOGCOL clc adc #$28 sta LOGCOL dec HOLD1 jmp DOLCO1 DOLCO2: clc lda LOGCOL adc COLCRS sta LOGCOL rts DOBUFC: jsr PHACRS lda LOGCOL pha lda BUFSTR sta ROWCRS lda $6D sta COLCRS lda #$01 sta BUFCNT DOBUF1: ldx #$17 lda SWPFLG bpl DOB1 ldx #$03 DOB1: cpx ROWCRS bne DOBU1A lda COLCRS cmp RMARGN bne DOBU1A inc BUFCNT jmp DOBUF2 DOBU1A: jsr INCRSB inc BUFCNT lda LOGCOL cmp LMARGN bne DOBUF1 dec ROWCRS jsr CRSRLF DOBUF2: jsr GETPLT bne DOBUF4 dec BUFCNT lda LOGCOL cmp LMARGN beq DOBUF4 jsr CRSRLF lda COLCRS cmp RMARGN bne DOBUF3 dec ROWCRS DOBUF3: lda BUFCNT bne DOBUF2 DOBUF4: pla sta LOGCOL jsr PLACRS rts STRBEG: jsr DOLCOL lda HOLD1 sta BUFSTR lda LMARGN sta $6D rts DELTIA: lda LOGCOL cmp LMARGN bne DELTIB dec ROWCRS DELTIB: jsr DOLCOL DELTIM: lda LOGCOL cmp LMARGN beq DELTI3 jsr CONVRT lda RMARGN sec sbc LMARGN tay DELTI1: lda ($64),y bne DELTI3 dey bpl DELTI1 DELTI2: jmp DELLIB DELTI3: rts TSTCTL: ldx #$2D TSTCT1: lda CNTRLS,x cmp ATACHR beq TSTCT2 dex dex dex bpl TSTCT1 TSTCT2: rts PHACRS: ldx #$02 PHACR1: lda ROWCRS,x sta TMPROW,x dex bpl PHACR1 rts PLACRS: ldx #$02 PLACR1: lda TMPROW,x sta ROWCRS,x dex bpl PLACR1 rts SWAP: jsr SWAPA jmp RETUR1 SWAPA: lda BOTSCR cmp #$18 beq SWAP3 ldx #$0B SWAP1: lda ROWCRS,x pha lda TXTROW,x sta ROWCRS,x pla sta TXTROW,x dex bpl SWAP1 lda SWPFLG eor #$FF sta SWPFLG SWAP3: rts CLICK: ldx #$7F CLICK1: stx CONSOL stx WSYNC dex bpl CLICK1 rts COLCR: lda #$00 ldx SWPFLG bne COLCR1 ldx DINDEX bne COLCR2 COLCR1: lda LMARGN COLCR2: sta COLCRS rts PUTMSC: lda SAVMSC sta $64 lda $59 sta $65 rts DRAW: ldx #$00 lda ICCOMZ cmp #$11 beq DRAWA cmp #$12 beq DRAWB ldy #$84 rts DRAWB: inx DRAWA: stx FILFLG lda ROWCRS sta NEWROW lda COLCRS sta NEWCOL lda $56 sta $62 lda #$01 sta ROWINC sta COLINC sec lda NEWROW sbc OLDROW sta DELTAR bcs DRAW1 lda #$FF sta ROWINC lda DELTAR eor #$FF clc adc #$01 sta DELTAR DRAW1: sec lda NEWCOL sbc OLDCOL sta DELTAC lda $62 sbc $5C sta L0078 bcs DRAW2 lda #$FF sta COLINC lda DELTAC eor #$FF sta DELTAC lda L0078 eor #$FF sta L0078 inc DELTAC bne DRAW2 inc L0078 DRAW2: ldx #$02 ldy #$00 sty $73 DRAW3A: tya sta ROWAC,x lda OLDROW,x sta ROWCRS,x dex bpl DRAW3A lda DELTAC inx tay lda L0078 sta $7F sta $75 bne DRAW3 lda DELTAC cmp DELTAR bcs DRAW3 lda DELTAR ldx #$02 tay DRAW3: tya sta COUNTR sta ENDPT pha lda $75 lsr a pla ror a sta ROWAC,x DRAW4A: lda COUNTR ora $7F bne DRAW11 jmp DRAW10 DRAW11: clc lda ROWAC adc DELTAR sta ROWAC bcc DRAW5 inc $71 DRAW5: lda $71 cmp $75 bcc DRAW6 bne DRAW5A lda ROWAC cmp ENDPT bcc DRAW6 DRAW5A: clc lda ROWCRS adc ROWINC sta ROWCRS ldx #$00 jsr SUBEND DRAW6: clc lda COLAC adc DELTAC sta COLAC lda $73 adc L0078 sta $73 cmp $75 bcc DRAW8 bne DRAW6A lda COLAC cmp ENDPT bcc DRAW8 DRAW6A: bit COLINC bpl DRAW6B dec COLCRS lda COLCRS cmp #$FF bne DRAW7 lda $56 beq DRAW7 dec $56 bpl DRAW7 DRAW6B: inc COLCRS bne DRAW7 inc $56 DRAW7: ldx #$02 jsr SUBEND DRAW8: jsr RANGE jsr OUTPLT lda FILFLG beq DRAW9 jsr PHACRS lda ATACHR sta HOLD4 DRAW8A: lda ROWCRS pha jsr INCRSA pla sta ROWCRS DRAW8C: jsr RANGE jsr GETPLT bne DRAW8B lda $02FD sta ATACHR jsr OUTPLT jmp DRAW8A DRAW8B: lda HOLD4 sta ATACHR jsr PLACRS DRAW9: sec lda COUNTR sbc #$01 sta COUNTR lda $7F sbc #$00 sta $7F bmi DRAW10 jmp DRAW4A DRAW10: jmp RETUR1 .include "atari_os_B_src_tables.s.txt" PIRQ5: lda $D209 cmp CH1 bne PIRQ3 lda KEYDEL bne PIRQ4 PIRQ3: lda $D209 cmp #$9F bne PIRQ1 lda SSFLAG eor #$FF sta SSFLAG bcs PIRQ4 PIRQ1: sta FILDAT sta CH1 lda #$03 sta KEYDEL lda #$00 sta ATRACT PIRQ4: lda #$30 sta SRTIMR PIRQ2: pla rti unused: .byte $FF,$FF,$FF,$FF,$FF,$FF HA_xxx: .addr PIRQ HANMI: .addr PNMI HARES: .addr PWRUP HAIRQ: .addr PIRQ