byte identical for OSI, CBM1 and KIM

This commit is contained in:
Michael Steil 2008-10-07 04:44:27 +00:00
parent e0efd6f6d3
commit 0e3e614617
4 changed files with 616 additions and 161 deletions

136
defines_cbm.s Normal file
View File

@ -0,0 +1,136 @@
Z00 := $0000
L0001 := $0001
L0002 := $0002
GOWARM := $0003
Z03 := $0003 ; same
GOSTROUT := $0006
GOGIVEAYF := $0008
CHARAC := $005A;
ENDCHR := $005B;;
EOLPNTR := $005C
DIMFLG := $005D;;
VALTYP := $005E;;
DATAFLG := $0060;;
SUBFLG := $0061;;
INPUTFLG := $0062;;
CPRMASK := $0063;;
Z14 := $0064 ; Ctrl+O flag
Z15 := $0004;;
Z16 := $0005;;
Z17 := $0006
Z18 := $0007
LINNUM := $0008;;
INPUTBUFFER := $000A
TEMPPT := $0065;;
LASTPT := $0066;
INDEX := $0071;;
DEST := $0073;
RESULT := $0075;
RESULT_LAST := $0079;
TXTTAB := $007A;
VARTAB := $007C;
ARYTAB := $007E;
STREND := $0080;;
FRETOP := $0082;;
FRESPC := $0084;
MEMSIZ := $0086;
CURLIN := $0088;
OLDLIN := $008A;
OLDTEXT := $008C;
Z8C := $008E;
DATPTR := $0090;
INPTR := $0092;
VARNAM := $0094;
VARPNT := $0096;;
FORPNT := $0098;;
LASTOP := $009A;
CPRTYP := $009C;
FNCNAM := $009D;
TEMP3 := $009D; ; same
DSCPTR := $009F;
DSCLEN := $00A2;
JMPADRS := $00A3;
TEMPX := $00A4;
ARGEXTENSION := $00A5; ; overlap with JMPADRS! (same on c64)
TEMP1 := $00A6;;
HIGHDS := $00A7;;
HIGHTR := $00A9;;
TEMP2 := $00AB;
INDX := $00AC;
TMPEXP := $00AC; ; same
EXPON := $00AD;
LOWTR := $00AE;; ; $9D also EXPSGN
EXPSGN := $00AF;;
FAC := $00B0;
FAC_LAST := $00B4;
FACSIGN := $00B5;
SERLEN := $00B6;
SHIFTSIGNEXT := $00B7;
ARG := $00B8;
ARG_LAST := $00BC;
ARGSIGN := $00BD;
STRNG1 := $00BE; ; TODO: also SGNCPR
FACEXTENSION := $00BF;
STRNG2 := $00C0;
CHRGET := $00C2;
CHRGOT := $00C8;
TXTPTR := $00C9;
RNDSEED := $00DA;
BYTES_PER_FRAME := $12
SPACE_FOR_GOSUB := $36
TEMPST := $68;;
FOR_STACK1 := $0F
FOR_STACK2 := $09
NUM_TOKENS := $23;;
NULL_MAX := $0A;;
BYTES_PER_ELEMENT := 5
BYTES_PER_VARIABLE := 7
BYTES_FP := 5
MANTISSA_BYTES := BYTES_FP-1
RAMSTART2 := $0400
RAMSTART3 := $0400
TOKEN_GOTO := $89;;
TOKEN_GOSUB := $8D;;
TOKEN_TAB := $A3;;
TOKEN_TO := $A4;;
TOKEN_FN := $A5;;
TOKEN_SPC := $A6;;
TOKEN_THEN := $A7;;
TOKEN_NOT := $A8;;
TOKEN_STEP := $A9;;
TOKEN_PLUS := $AA;;
TOKEN_MINUS := $AB;;
TOKEN_GREATER := $B1;;
TOKEN_EQUAL := $B2;;
TOKEN_SGN := $B4;;
TOKEN_LEFTSTR := $C8;;
L00CF := $00CF
OPEN := $FFC0
CLOSE := $FFC3
CHKIN := $FFC6
CHKOUT := $FFC9
CLRCH := $FFCC
CHRIN := $FFCF
CHROUT := $FFD2
LOAD := $FFD5
SAVE := $FFD8
VERIFY := $FFDB
SYS := $FFDE
ISCNTC := $FFE1
GETIN := $FFE4
CLALL := $FFE7
LE7F3 := $E7F3
MONCOUT := CHROUT
MONRDKEY := GETIN

114
defines_kim.s Normal file
View File

@ -0,0 +1,114 @@
Z00 := $0000
L0001 := $0001
L0002 := $0002
GOWARM := $0003
GOSTROUT := $0006
GOGIVEAYF := $0008
CHARAC := $000A
ENDCHR := $000B
EOLPNTR := $000C
DIMFLG := $000D
VALTYP := $000E
DATAFLG := $0010
SUBFLG := $0011
INPUTFLG := $0012
CPRMASK := $0013
Z14 := $0014 ; Ctrl+O flag
Z15 := $0015
Z16 := $0016
Z17 := $0017
Z18 := $0018
LINNUM := $0019
INPUTBUFFER := $001B
TEMPPT := $0063
LASTPT := $0064
INDEX := $006F
DEST := $0071
RESULT := $0073
RESULT_LAST := $0077
TXTTAB := $0078
VARTAB := $007A
ARYTAB := $007C
STREND := $007E
FRETOP := $0080
FRESPC := $0082
MEMSIZ := $0084
CURLIN := $0086
OLDLIN := $0088
OLDTEXT := $008A
Z8C := $008C
DATPTR := $008E
INPTR := $0090
VARNAM := $0092
VARPNT := $0094
FORPNT := $0096
LASTOP := $0098
CPRTYP := $009A
FNCNAM := $009B
TEMP3 := $009B ; same
DSCPTR := $009D
DSCLEN := $00A0
JMPADRS := $00A1
TEMPX := $00A2
ARGEXTENSION := $00A3 ; overlap with JMPADRS! (same on c64)
TEMP1 := $00A4
HIGHDS := $00A5
HIGHTR := $00A7
TEMP2 := $00A9
INDX := $00AA
TMPEXP := $00AA ; same
EXPON := $00AB
LOWTR := $00AC ; $9D also EXPSGN
EXPSGN := $00AD
FAC := $00AE
FAC_LAST := $00B2
FACSIGN := $00B3
SERLEN := $00B4
SHIFTSIGNEXT := $00B5
ARG := $00B6
ARG_LAST := $00BA
ARGSIGN := $00BB
STRNG1 := $00BC ; TODO: also SGNCPR
FACEXTENSION := $00BD
STRNG2 := $00BE
CHRGET := $00C0
CHRGOT := $00C6
TXTPTR := $00C7
RNDSEED := $00D8
L1800 := $1800
L1873 := $1873
MONRDKEY := $1E5A
MONCOUT := $1EA0
BYTES_PER_FRAME := $12
SPACE_FOR_GOSUB := $36
TEMPST := $66
FOR_STACK1 := $0F
FOR_STACK2 := $09
NUM_TOKENS := $1D
NULL_MAX := $F2 ; probably different in original version; the image I have seems to be modified; see PDF
BYTES_PER_ELEMENT := 5
BYTES_PER_VARIABLE := 7
BYTES_FP := 5
MANTISSA_BYTES := BYTES_FP-1
TOKEN_GOTO := $88
TOKEN_GOSUB := $8C
TOKEN_TAB := $9D
TOKEN_TO := $9E
TOKEN_FN := $9F
TOKEN_SPC := $A0
TOKEN_THEN := $A1
TOKEN_NOT := $A2
TOKEN_STEP := $A3
TOKEN_PLUS := $A4
TOKEN_MINUS := $A5
TOKEN_GREATER := $AB
TOKEN_EQUAL := $AC
TOKEN_SGN := $AE
TOKEN_LEFTSTR := $C2

123
defines_osi.s Normal file
View File

@ -0,0 +1,123 @@
Z00 := $0000
L0001 := $0001
L0002 := $0002
GOWARM := $0003
GOSTROUT := $0006
GOGIVEAYF := $0008
USR := $000A
Z15 := $000D
Z16 := $000E
Z17 := $000F
Z18 := $0010
LINNUM := $0011
INPUTBUFFER := $0013
CHARAC := $005B
ENDCHR := $005C
EOLPNTR := $005D
DIMFLG := $005E
VALTYP := $005F
DATAFLG := $0060
SUBFLG := $0061
INPUTFLG := $0062
CPRMASK := $0063
Z14 := $0064 ; Ctrl+O flag
TEMPPT := $0065
LASTPT := $0066
INDEX := $0071
DEST := $0073
RESULT := $0075
RESULT_LAST := $0078
TXTTAB := $0079
VARTAB := $007B
ARYTAB := $007D
STREND := $007F
FRETOP := $0081
FRESPC := $0083
MEMSIZ := $0085
CURLIN := $0087
OLDLIN := $0089
OLDTEXT := $008B
Z8C := $008D
DATPTR := $008F
INPTR := $0091
VARNAM := $0093
VARPNT := $0095
FORPNT := $0097
LASTOP := $0099
CPRTYP := $009B
FNCNAM := $009C
TEMP3 := $009C ; same
DSCPTR := $009E
DSCLEN := $00A0
JMPADRS := $00A1
TEMP1 := $00A3
ARGEXTENSION := $00A3 ; same!
HIGHDS := $00A4
HIGHTR := $00A6
INDX := $00A8
TEMP2 := $00A8 ; same!
TMPEXP := $00A8 ; same
EXPON := $00A9
LOWTR := $00AA ; $AB also EXPSGN?
EXPSGN := $00AB
FAC := $00AC
FAC_LAST := $00AF
FACSIGN := $00B0
SERLEN := $00B1
SHIFTSIGNEXT := $00B2
ARG := $00B3
ARG_LAST := $00B6
ARGSIGN := $00B7
STRNG1 := $00B8 ; TODO: also SGNCPR
FACEXTENSION := $00B9
STRNG2 := $00BA
CHRGET := $00BC
CHRGOT := $00C2
TXTPTR := $00C3
RNDSEED := $00D4
L0207 := $0207
L020A := $020A
L2A13 := $2A0A
L2EE2 := $2EF9
MONRDKEY := $FFEB
MONCOUT := $FFEE
MONISCNTC := $FFF1
LOAD := $FFF4
SAVE := $FFF7
BYTES_PER_FRAME := $10
SPACE_FOR_GOSUB := $33
TEMPST := $68
FOR_STACK1 := $0D
FOR_STACK2 := $08
NUM_TOKENS := $1C
NULL_MAX := $0A
BYTES_PER_ELEMENT := 4
BYTES_PER_VARIABLE := 6
BYTES_FP := 4
MANTISSA_BYTES := BYTES_FP-1
RAMSTART3 := $0300
TOKEN_GOTO := $88
TOKEN_GOSUB := $8C
TOKEN_TAB := $9C
TOKEN_TO := $9D
TOKEN_FN := $9E
TOKEN_SPC := $9F
TOKEN_THEN := $A0
TOKEN_NOT := $A1
TOKEN_STEP := $A2
TOKEN_PLUS := $A3
TOKEN_MINUS := $A4
TOKEN_GREATER := $AA
TOKEN_EQUAL := $AB
TOKEN_SGN := $AD
TOKEN_LEFTSTR := $C1
RAMSTART2 := $0300

404
msbasic.s
View File

@ -11,54 +11,6 @@
.include "defines_cbm.s" .include "defines_cbm.s"
.endif .endif
.ifdef CBM
CLOSE := $AAAA
OPEN := $AAAA
SYS := $AAAA
CMD := $AAAA
PRINTH := $AAAA
VERIFY := $AAAA
INPUTH := $AAAA
LFFCC := $AAAA
LC48C := $AAAA
LFFCF := $AAAA
LC9C8 := $AAAA
GETLN := $AAAA
LFFE7 := $AAAA
LOAD := $AAAA
SAVE := $AAAA
LDC50 := $AAAA
L00CF := $00AA
L0071 := $00AA
LDB6D := $AAAA
LD9BF := $AAAA
LDADE := $AAAA
LD9B4 := $AAAA
LD130 := $AAAA
LD57E := $AAAA
LC99F := $AAAA
LFFC9 := $AAAA
LCE13 := $AAAA
LD676 := $AAAA
LFFD2 := $AAAA
LE1CC := $AAAA
LE1C2 := $AAAA
LFFC6 := $AAAA
L00C2 := $00AA
LC7F0 := $AAAA
LCAF1 := $AAAA
LE19B := $AAAA
LE1BC := $AAAA
LDA74 := $AAAA
LD353 := $AAAA
LDD3A := $AAAA
LE19F := $AAAA
LDB0E := $AAAA
LDB21 := $AAAA
LE7F3 := $AAAA
LC38B := $AAAA
.endif
.include "macros.s" .include "macros.s"
.setcpu "6502" .setcpu "6502"
@ -119,11 +71,15 @@ UNFNC:
.addr SGN .addr SGN
.addr INT .addr INT
.addr ABS .addr ABS
.ifndef CONFIG_11 .ifdef OSI
.addr USR .addr USR
.else /* CONFIG_11 */ .endif
.ifdef KIM
.addr IQERR .addr IQERR
.endif /* CONFIG_11 */ .endif
.ifdef CBM
.addr Z00
.endif
.addr FRE .addr FRE
.addr POS .addr POS
.addr SQR .addr SQR
@ -479,18 +435,15 @@ MEMERR:
ERROR: ERROR:
lsr Z14 lsr Z14
.ifdef CBM .ifdef CBM
lda $03 lda Z03
beq L2329 beq LC366
jsr LFFCC jsr CLRCH
lda #$00 lda #$00
sta $03 sta Z03
.endif
LC366: LC366:
jsr LC9D2
jsr OUTDO
.else
jsr CRDO jsr CRDO
jsr OUTQUES jsr OUTQUES
.endif
L2329: L2329:
lda ERROR_MESSAGES,x lda ERROR_MESSAGES,x
.ifdef CONFIG_11 .ifdef CONFIG_11
@ -519,7 +472,11 @@ RESTART:
lsr Z14 lsr Z14
lda #<QT_OK lda #<QT_OK
ldy #>QT_OK ldy #>QT_OK
.ifdef CBM
jsr STROUT
.else
jsr GOWARM jsr GOWARM
.endif
L2351: L2351:
jsr INLIN jsr INLIN
stx TXTPTR stx TXTPTR
@ -690,12 +647,12 @@ L244C:
.endif .endif
L2453: L2453:
jmp L29B9 jmp L29B9
GETLN:
.ifdef CBM .ifdef CBM
jsr LFFCF jsr CHRIN
ldy $03 ldy Z03
bne L2465 bne L2465
.else .else
GETLN:
jsr MONRDKEY jsr MONRDKEY
.endif .endif
.ifndef CONFIG_11 .ifndef CONFIG_11
@ -747,7 +704,11 @@ LC49E:
bvs L24AC bvs L24AC
cmp #$3F cmp #$3F
bne L2484 bne L2484
.ifdef CBM
lda #$99
.else
lda #$97 lda #$97
.endif
bne L24AC bne L24AC
L2484: L2484:
cmp #$30 cmp #$30
@ -792,7 +753,11 @@ L24BF:
sta DATAFLG sta DATAFLG
L24C1: L24C1:
sec sec
.ifdef CBM
sbc #$55
.else
sbc #$54 sbc #$54
.endif
bne L246C bne L246C
sta ENDCHR sta ENDCHR
L24C8: L24C8:
@ -882,7 +847,7 @@ CLEARC:
sta FRETOP sta FRETOP
sty FRETOP+1 sty FRETOP+1
.ifdef CBM .ifdef CBM
jsr LFFE7 jsr CLALL
.endif .endif
lda VARTAB lda VARTAB
ldy VARTAB+1 ldy VARTAB+1
@ -1161,7 +1126,9 @@ SETDA:
sty DATPTR+1 sty DATPTR+1
RET2: RET2:
rts rts
.ifndef CBM
ISCNTC: ISCNTC:
.endif
.ifdef OSI .ifdef OSI
jmp MONISCNTC jmp MONISCNTC
nop nop
@ -1261,11 +1228,13 @@ SAVE:
jmp L1800 jmp L1800
ldx INPUTFLG ldx INPUTFLG
txs txs
lda #$70 lda #<QT_SAVED
ldy #$27 ldy #>QT_SAVED
jmp STROUT jmp STROUT
QT_LOADED:
.byte "LOADED" .byte "LOADED"
.byte $00 .byte $00
QT_SAVED:
.byte "SAVED" .byte "SAVED"
.byte $0D,$0A,$00,$00,$00,$00,$00,$00 .byte $0D,$0A,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00
@ -1288,8 +1257,8 @@ LOAD:
ldy #$23 ldy #$23
sta L0001 sta L0001
sty L0002 sty L0002
lda #$69 lda #<QT_LOADED
ldy #$27 ldy #>QT_LOADED
jsr STROUT jsr STROUT
ldx $17ED ldx $17ED
ldy $17EE ldy $17EE
@ -1319,7 +1288,11 @@ GOSUB:
pha pha
lda CURLIN lda CURLIN
pha pha
.ifdef CBM
lda #$8D
.else
lda #$8C lda #$8C
.endif
pha pha
L27E9: L27E9:
jsr CHRGOT jsr CHRGOT
@ -1358,7 +1331,11 @@ POP:
sta FORPNT sta FORPNT
jsr GTFORPNT jsr GTFORPNT
txs txs
.ifdef CBM
cmp #$8D
.else
cmp #$8C cmp #$8C
.endif
beq RETURN beq RETURN
ldx #ERR_NOGOSUB ldx #ERR_NOGOSUB
.byte $2C .byte $2C
@ -1418,7 +1395,11 @@ L2866:
IF: IF:
jsr FRMEVL jsr FRMEVL
jsr CHRGOT jsr CHRGOT
.ifdef CBM
cmp #$89
.else
cmp #$88 cmp #$88
.endif
beq L2884 beq L2884
lda #TOKEN_THEN lda #TOKEN_THEN
jsr SYNCHR jsr SYNCHR
@ -1529,10 +1510,10 @@ PUTSTR:
ldy $99 ldy $99
cpy #$D0 cpy #$D0
bne LC92B bne LC92B
jsr LD57E jsr FREFAC
cmp #$06 cmp #$06
beq LC8E2 beq LC8E2
jmp LD130 jmp IQERR
LC8E2: LC8E2:
ldy #$00 ldy #$00
sty $B0 sty $B0
@ -1540,11 +1521,11 @@ LC8E2:
LC8E8: LC8E8:
sty $C0 sty $C0
jsr LC91C jsr LC91C
jsr LD9B4 jsr MUL10
inc $C0 inc $C0
ldy $C0 ldy $C0
jsr LC91C jsr LC91C
jsr LDADE jsr COPY_FAC_TO_ARG_ROUNDED
tax tax
beq LC902 beq LC902
inx inx
@ -1555,8 +1536,8 @@ LC902:
iny iny
cpy #$06 cpy #$06
bne LC8E8 bne LC8E8
jsr LD9B4 jsr MUL10
jsr LDB6D jsr QINT
ldx #$02 ldx #$02
sei sei
LC912: LC912:
@ -1567,13 +1548,13 @@ LC912:
cli cli
rts rts
LC91C: LC91C:
lda (L0071),y lda (INDEX),y
jsr L00CF jsr L00CF
bcc LC926 bcc LC926
jmp LD130 jmp IQERR
LC926: LC926:
sbc #$2F sbc #$2F
jmp LDC50 jmp ADDACC
LC92B: LC92B:
.endif .endif
ldy #$02 ldy #$02
@ -1606,11 +1587,15 @@ L294D:
sta STRNG1 sta STRNG1
sty STRNG1+1 sty STRNG1+1
jsr MOVINS jsr MOVINS
.ifndef CONFIG_11 .ifdef OSI
lda #$AC lda #$AC
.else /* CONFIG_11 */ .endif
.ifdef KIM
lda #$AE lda #$AE
.endif /* CONFIG_11 */ .endif
.ifdef CBM
lda #$B0
.endif
ldy #$00 ldy #$00
L2963: L2963:
sta DSCPTR sta DSCPTR
@ -1627,20 +1612,20 @@ L2963:
sta (FORPNT),y sta (FORPNT),y
rts rts
.ifdef CBM .ifdef CBM
LC97F: PRINTH:
jsr LC985 jsr CMD
jmp LCAD6 jmp LCAD6
LC985: CMD:
jsr LD676 jsr GETBYT
beq LC98F beq LC98F
lda #$2C lda #$2C
jsr LCE13 jsr SYNCHR
LC98F: LC98F:
php php
jsr LFFC9 jsr CHKOUT
stx $03 stx Z03
plp plp
jmp LC99F jmp PRINT
.endif .endif
PRSTRING: PRSTRING:
jsr STRPRT jsr STRPRT
@ -1690,15 +1675,17 @@ L29B9:
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
.ifdef CBM .ifdef CBM
ldx #$09 ldx #$09
lda $03 lda Z03
bne L29DD bne L29DD
LC9D2: LC9D2:
lda $03 .endif
CRDO:
.ifdef CBM
lda Z03
bne LC9D8 bne LC9D8
sta $05 sta $05
LC9D8: LC9D8:
.endif .endif
CRDO:
lda #$0D lda #$0D
.ifndef CBM .ifndef CBM
sta Z16 sta Z16
@ -1708,7 +1695,7 @@ CRDO:
jsr OUTDO jsr OUTDO
PRINTNULLS: PRINTNULLS:
.ifdef CBM .ifdef CBM
lda $03 lda Z03
bne L29DD bne L29DD
.endif .endif
txa txa
@ -1755,11 +1742,7 @@ L29F5:
jsr GTBYTC jsr GTBYTC
cmp #$29 cmp #$29
.ifndef KIM .ifndef KIM
.ifdef CBM
.byte $AA, $AA; XXX fixme
.else
bne L2A00 bne L2A00
.endif
pla pla
cmp #TOKEN_TAB cmp #TOKEN_TAB
bne L2A0A bne L2A0A
@ -1840,7 +1823,7 @@ OUTDO:
LCA5A: LCA5A:
lda $05 lda $05
beq L2A4E beq L2A4E
lda $03 lda Z03
bne L2A4E bne L2A4E
dec $05 dec $05
LCA64: LCA64:
@ -1850,8 +1833,8 @@ LCA64:
bcc L2A4E bcc L2A4E
LCA6A: LCA6A:
.ifdef CBM .ifdef CBM
lda $03 lda Z03
jsr LE1CC jsr PATCH6
nop nop
.else .else
lda Z16 lda Z16
@ -1863,20 +1846,18 @@ L2A4C:
.endif .endif
L2A4E: L2A4E:
pla pla
.ifdef OSI
jsr LFFEE
nop
nop
nop
nop
.endif
.ifdef KIM .ifdef KIM
sty DIMFLG sty DIMFLG
.endif
jsr MONCOUT jsr MONCOUT
.ifdef KIM
ldy DIMFLG ldy DIMFLG
.endif .endif
.ifdef CBM .ifdef OSI
jsr LFFD2 nop
nop
nop
nop
.endif .endif
L2A56: L2A56:
and #$FF and #$FF
@ -1891,7 +1872,7 @@ L2A59:
L2A63: L2A63:
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
.ifdef CBM .ifdef CBM
jsr LE1C2 jsr PATCH5
nop nop
.else .else
lda Z8C lda Z8C
@ -1904,7 +1885,7 @@ L2A00:
jmp SYNERR jmp SYNERR
L2A6E: L2A6E:
.ifdef CBM .ifdef CBM
lda $03 lda Z03
beq LCA8F beq LCA8F
ldx #$C4 ;; XXX ldx #$C4 ;; XXX
jmp ERROR jmp ERROR
@ -1924,39 +1905,39 @@ GET:
.ifdef CBM .ifdef CBM
cmp #$23 cmp #$23
bne LCAB6 bne LCAB6
jsr L00C2 jsr CHRGET
jsr LD676 jsr GETBYT
lda #$2C lda #$2C
jsr LCE13 jsr SYNCHR
jsr LFFC6 jsr CHKIN
stx $03 stx Z03
LCAB6: LCAB6:
.endif .endif
ldx #$1C ldx #<(INPUTBUFFER+1)
ldy #$00 ldy #$00
sty $1C sty INPUTBUFFER+1
lda #$40 lda #$40
jsr PROCESS_INPUT_LIST jsr PROCESS_INPUT_LIST
.ifdef CBM .ifdef CBM
ldx $03 ldx Z03
bne LCAD8 bne LCAD8
.endif .endif
rts rts
.endif /* CONFIG_G11 */ .endif /* CONFIG_G11 */
.ifdef CBM .ifdef CBM
LCAC6: INPUTH:
jsr LD676 jsr GETBYT
lda #$2C lda #$2C
jsr LCE13 jsr SYNCHR
jsr LFFC6 jsr CHKIN
stx $03 stx Z03
jsr LCAF1 jsr L2A9E
LCAD6: LCAD6:
lda $03 lda Z03
LCAD8: LCAD8:
jsr LFFCC jsr CLRCH
ldx #$00 ldx #$00
stx $03 stx Z03
rts rts
LCAE0: LCAE0:
.endif .endif
@ -1975,29 +1956,29 @@ L2A9E:
LCAF8: LCAF8:
jsr NXIN jsr NXIN
.ifdef CBM .ifdef CBM
lda $03 lda Z03
beq LCB0C beq LCB0C
lda $020C lda $020C
and #$02 and #$02
beq LCB0C beq LCB0C
jsr LCAD6 jsr LCAD6
jmp LC7F0 jmp DATA
LCB0C: LCB0C:
.endif .endif
lda INPUTBUFFER lda INPUTBUFFER
bne L2ABE bne L2ABE
.ifdef CBM .ifdef CBM
lda $03 lda Z03
bne LCAF8 bne LCAF8
jmp LE19B jmp PATCH1
LCB17: NXIN:
lda $03 lda Z03
bne LCB21 bne LCB21
.else .else
clc clc
jmp CONTROL_C_TYPED jmp CONTROL_C_TYPED
.endif
NXIN: NXIN:
.endif
jsr OUTQUES jsr OUTQUES
jsr OUTSP jsr OUTSP
LCB21: LCB21:
@ -2031,14 +2012,19 @@ PROCESS_INPUT_ITEM:
bvc L2AF0 bvc L2AF0
jsr MONRDKEY jsr MONRDKEY
sta INPUTBUFFER sta INPUTBUFFER
.ifdef CBM
ldy #0
ldx #<INPUTBUFFER-1
.else
ldx #<INPUTBUFFER-1 ldx #<INPUTBUFFER-1
ldy #0 ldy #0
.endif
bne L2AF8 bne L2AF8
L2AF0: L2AF0:
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
bmi FINDATA bmi FINDATA
.ifdef CBM .ifdef CBM
lda $03 lda Z03
bne LCB64 bne LCB64
.endif .endif
jsr OUTQUES jsr OUTQUES
@ -2056,7 +2042,7 @@ INSTART:
bvc L2B10 bvc L2B10
.ifdef CBM .ifdef CBM
lda #$00 lda #$00
jsr LE1BC jsr PATCH4
nop nop
.else .else
inx inx
@ -2154,11 +2140,11 @@ INPDONE:
L2B94: L2B94:
ldy #$00 ldy #$00
lda (INPTR),y lda (INPTR),y
beq L2BA1
.ifdef CBM .ifdef CBM
beq L2BA1 lda Z03
lda $03 bne L2BA1
.endif .endif
beq L2BA1
lda #<ERREXTRA lda #<ERREXTRA
ldy #>ERREXTRA ldy #>ERREXTRA
jmp STROUT jmp STROUT
@ -2423,8 +2409,8 @@ L2D39:
bne LCDC1 bne LCDC1
lda #<CON_PI lda #<CON_PI
ldy #>CON_PI ldy #>CON_PI
jsr LDA74 jsr LOAD_FAC_FROM_YA
jmp L00C2 jmp CHRGET
CON_PI: CON_PI:
.byte $82,$49,$0f,$DA,$A1 .byte $82,$49,$0f,$DA,$A1
LCDC1: LCDC1:
@ -2478,7 +2464,7 @@ CHKOPN:
.byte $2C .byte $2C
CHKCOM: CHKCOM:
lda #$2C lda #$2C
SYNCHR: SYNCHR: ; XXX all CBM code calls SYNCHR instead of CHKCOM
ldy #$00 ldy #$00
cmp (TXTPTR),y cmp (TXTPTR),y
bne SYNERR bne SYNERR
@ -2504,7 +2490,7 @@ FRM_VARIABLE_CALL = *-1
ldx VALTYP ldx VALTYP
beq L2DB1 beq L2DB1
.ifdef CBM .ifdef CBM
jmp LE19F jmp PATCH2
clc clc
LCE3B: LCE3B:
cpy #$C9 cpy #$C9
@ -2535,7 +2521,11 @@ L2DB1:
jmp GIVAYF jmp GIVAYF
L2DC2: L2DC2:
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
.ifdef CBM
jmp PATCH3
.else
jmp LOAD_FAC_FROM_YA jmp LOAD_FAC_FROM_YA
.endif
.ifdef CBM .ifdef CBM
.byte $19 .byte $19
LCE69: LCE69:
@ -2549,7 +2539,7 @@ LCE76:
lda #$FE lda #$FE
ldy #$01 ldy #$01
sei sei
jsr LDA74 jsr LOAD_FAC_FROM_YA
cli cli
sty $B1 sty $B1
rts rts
@ -2559,11 +2549,11 @@ LCE82:
cpy #$54 cpy #$54
bne LCE90 bne LCE90
lda $020C lda $020C
jmp LDB0E jmp FLOAT
LCE90: LCE90:
lda $B3 lda $B3
ldy $B4 ldy $B4
jmp LDA74 jmp LOAD_FAC_FROM_YA
.endif .endif
UNARY: UNARY:
asl a asl a
@ -3358,6 +3348,7 @@ STR:
jsr FOUT1 jsr FOUT1
pla pla
pla pla
LD353:
lda #$FF lda #$FF
ldy #$00 ldy #$00
beq STRLIT beq STRLIT
@ -3624,7 +3615,11 @@ MOVE_HIGHEST_STRING_TO_TOP:
ldx FNCNAM+1 ldx FNCNAM+1
beq L33FA beq L33FA
lda JMPADRS+1 lda JMPADRS+1
.ifdef CBM
sbc #$03
.else
and #$04 and #$04
.endif
lsr a lsr a
tay tay
sta JMPADRS+1 sta JMPADRS+1
@ -3835,7 +3830,7 @@ L353F:
SUBSTRING_SETUP: SUBSTRING_SETUP:
jsr CHKCLS jsr CHKCLS
pla pla
.ifndef CONFIG_11 .ifndef KIM
sta JMPADRS+1 sta JMPADRS+1
pla pla
sta JMPADRS+2 sta JMPADRS+2
@ -3852,7 +3847,7 @@ SUBSTRING_SETUP:
sta DSCPTR sta DSCPTR
pla pla
sta DSCPTR+1 sta DSCPTR+1
.ifdef CONFIG_11 .ifdef KIM
lda TEMPX lda TEMPX
pha pha
tya tya
@ -3861,7 +3856,7 @@ SUBSTRING_SETUP:
ldy #$00 ldy #$00
txa txa
beq GOIQ beq GOIQ
.ifndef CONFIG_11 .ifndef KIM
inc JMPADRS+1 inc JMPADRS+1
jmp (JMPADRS+1) jmp (JMPADRS+1)
.else /* CONFIG_11 */ .else /* CONFIG_11 */
@ -3883,7 +3878,7 @@ ASC:
ldy #$00 ldy #$00
lda (INDEX),y lda (INDEX),y
tay tay
.ifndef CONFIG_11 .ifndef KIM
jmp SNGFLT1 jmp SNGFLT1
.else /* CONFIG_11 */ .else /* CONFIG_11 */
jmp SNGFLT jmp SNGFLT
@ -4554,6 +4549,7 @@ MUL10:
clc clc
adc #$02 adc #$02
bcs JOV bcs JOV
LD9BF:
ldx #$00 ldx #$00
stx STRNG1 stx STRNG1
jsr FADD2 jsr FADD2
@ -4704,7 +4700,11 @@ STORE_FAC_IN_TEMP2_ROUNDED:
ldx #TEMP2 ldx #TEMP2
.byte $2C .byte $2C
STORE_FAC_IN_TEMP1_ROUNDED: STORE_FAC_IN_TEMP1_ROUNDED:
.ifdef CBM
ldx #$A6 ; XXX TEMP1
.else
ldx #$A4 ldx #$A4
.endif
ldy #$00 ldy #$00
beq STORE_FAC_AT_YX_ROUNDED beq STORE_FAC_AT_YX_ROUNDED
SETFOR: SETFOR:
@ -4797,6 +4797,7 @@ FLOAT2:
sta FAC+4 sta FAC+4
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
sta FAC+3 sta FAC+3
LDB21:
stx FAC stx FAC
sta FACEXTENSION sta FACEXTENSION
sta FACSIGN sta FACSIGN
@ -5060,7 +5061,11 @@ CON_BILLION:
CON_99999999_9: CON_99999999_9:
.byte $9B,$3E,$BC,$1F,$FD .byte $9B,$3E,$BC,$1F,$FD
CON_999999999: CON_999999999:
.ifdef CBM
.byte $9E,$6E,$6B,$27,$FE
.else
.byte $9E,$6E,$6B,$27,$FD .byte $9E,$6E,$6B,$27,$FD
.endif
CON_BILLION: CON_BILLION:
.byte $9E,$6E,$6B,$28,$00 .byte $9E,$6E,$6B,$28,$00
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
@ -5176,6 +5181,7 @@ L3CF0:
sty STRNG2 sty STRNG2
L3CF2: L3CF2:
ldy #$00 ldy #$00
LDD3A:
ldx #$80 ldx #$80
L3CF6: L3CF6:
lda FAC_LAST lda FAC_LAST
@ -5303,6 +5309,7 @@ DECTBL:
.byte $FF,$FF,$D8,$F0,$00,$00,$03,$E8 .byte $FF,$FF,$D8,$F0,$00,$00,$03,$E8
.byte $FF,$FF,$FF,$9C,$00,$00,$00,$0A .byte $FF,$FF,$FF,$9C,$00,$00,$00,$0A
.byte $FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF
DECTBL_END:
.ifdef CBM .ifdef CBM
.byte $FF,$DF,$0A,$80 ; TI$ .byte $FF,$DF,$0A,$80 ; TI$
.byte $00,$03,$4B,$C0 .byte $00,$03,$4B,$C0
@ -5311,7 +5318,6 @@ DECTBL:
.byte $FF,$FF,$FD,$A8 .byte $FF,$FF,$FD,$A8
.byte $00,$00,$00,$3C .byte $00,$00,$00,$3C
.endif .endif
DECTBL_END:
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
SQR: SQR:
jsr COPY_FAC_TO_ARG_ROUNDED jsr COPY_FAC_TO_ARG_ROUNDED
@ -5431,10 +5437,18 @@ POLYNOMIAL_ODD:
sta STRNG2 sta STRNG2
sty STRNG2+1 sty STRNG2+1
jsr STORE_FAC_IN_TEMP1_ROUNDED jsr STORE_FAC_IN_TEMP1_ROUNDED
.ifdef CBM
lda #$A6
.else
lda #$A4 lda #$A4
.endif
jsr FMULT jsr FMULT
jsr SERMAIN jsr SERMAIN
.ifdef CBM
lda #$A6
.else
lda #$A4 lda #$A4
.endif
ldy #$00 ldy #$00
jmp FMULT jmp FMULT
POLYNOMIAL: POLYNOMIAL:
@ -5525,11 +5539,7 @@ LDF88:
lda #$80 lda #$80
sta FAC sta FAC
jsr NORMALIZE_FAC2 jsr NORMALIZE_FAC2
.ifndef CONFIG_11 ldx #RNDSEED
ldx #$D4
.else /* CONFIG_11 */
ldx #$D8
.endif /* CONFIG_11 */
ldy #$00 ldy #$00
GOMOVMF: GOMOVMF:
jmp STORE_FAC_AT_YX_ROUNDED jmp STORE_FAC_AT_YX_ROUNDED
@ -5582,7 +5592,11 @@ TAN:
ldx #TEMP3 ldx #TEMP3
ldy #$00 ldy #$00
jsr GOMOVMF jsr GOMOVMF
.ifdef CONFIG_11
lda #TEMP1
.else
lda #$A4 lda #$A4
.endif
ldy #$00 ldy #$00
jsr LOAD_FAC_FROM_YA jsr LOAD_FAC_FROM_YA
lda #$00 lda #$00
@ -5752,10 +5766,17 @@ COLD_START2:
sta $0B sta $0B
sty $0C sty $0C
.endif /* ! CONFIG_11 */ .endif /* ! CONFIG_11 */
.ifdef CBM
lda #<IQERR
ldy #>IQERR
sta L0001
sty L0002
.else
lda #$48 lda #$48
sta Z17 sta Z17
lda #$38 lda #$38
sta Z18 sta Z18
.endif
.ifndef CONFIG_11 .ifndef CONFIG_11
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET ldx #GENERIC_CHRGET_END-GENERIC_CHRGET
.else /* CONFIG_11 */ .else /* CONFIG_11 */
@ -5769,7 +5790,7 @@ L4098:
txa txa
sta SHIFTSIGNEXT sta SHIFTSIGNEXT
.ifdef CBM .ifdef CBM
sta $03 sta Z03
.endif .endif
sta LASTPT+1 sta LASTPT+1
sta Z15 sta Z15
@ -5943,7 +5964,7 @@ L4192:
jsr SCRTCH jsr SCRTCH
.endif /* CONFIG_11 */ .endif /* CONFIG_11 */
.ifdef CBM .ifdef CBM
jmp LC38B jmp RESTART
.else .else
lda #<STROUT lda #<STROUT
ldy #>STROUT ldy #>STROUT
@ -5958,6 +5979,7 @@ L4192:
sty L0002 sty L0002
jmp (L0001) jmp (L0001)
.endif .endif
.ifndef CBM
QT_WANT: QT_WANT:
.byte "WANT SIN-COS-TAN-ATN" .byte "WANT SIN-COS-TAN-ATN"
.byte $00 .byte $00
@ -5975,19 +5997,28 @@ QT_MEMORY_SIZE:
QT_TERMINAL_WIDTH: QT_TERMINAL_WIDTH:
.byte "TERMINAL WIDTH" .byte "TERMINAL WIDTH"
.byte $00 .byte $00
.endif
QT_BYTES_FREE: QT_BYTES_FREE:
.byte " BYTES FREE" .byte " BYTES FREE"
.ifndef CBM
.byte $0D,$0A,$0D,$0A .byte $0D,$0A,$0D,$0A
.ifndef CONFIG_11 .endif
.ifdef OSI
.byte "OSI 6502 BASIC VERSION 1.0 REV " .byte "OSI 6502 BASIC VERSION 1.0 REV "
.byte "3.2" .byte "3.2"
.else /* CONFIG_11 */ .endif
.ifdef KIM
.byte "MOS TECH 6502 BASIC V1.1" .byte "MOS TECH 6502 BASIC V1.1"
.endif /* CONFIG_11 */ .endif
.ifdef CBM
.byte $13
.byte "*** COMMODORE BASIC ***"
.byte $11,$11,$11,$00
.else
.byte $0D,$0A .byte $0D,$0A
.byte "COPYRIGHT 1977 BY MICROSOFT CO." .byte "COPYRIGHT 1977 BY MICROSOFT CO."
.byte $0D,$0A,$00 .byte $0D,$0A,$00
.endif
.ifdef OSI .ifdef OSI
.byte $00,$00 .byte $00,$00
LBEE4: LBEE4:
@ -6158,3 +6189,54 @@ RAMSTART2:
.byte $08,$29,$25,$20,$60,$2A,$E5,$E4 .byte $08,$29,$25,$20,$60,$2A,$E5,$E4
.byte $20,$66,$24,$65,$AC,$04,$A4 .byte $20,$66,$24,$65,$AC,$04,$A4
.endif /* KIM */ .endif /* KIM */
.ifdef CBM
PATCH1:
clc
jmp CONTROL_C_TYPED
PATCH2:
bit $B4
bpl LE1AA
cmp #$54
bne LE1AA
jmp LCE3B
LE1AA:
rts
PATCH3:
bit $B4
bmi LE1B2
jmp LCE90
LE1B2:
cmp #$54
beq LE1B9
jmp LCE82
LE1B9:
jmp LCE69
PATCH4:
sta CHARAC
inx
jmp LE1D9
PATCH5:
bpl LE1C9
lda $8E
ldy $8F
rts
LE1C9:
ldy #$FF
rts
PATCH6:
bne LE1D8
LE1CE:
inc $05
bne LE1D8
lda $E2
sta $05
bne LE1CE
LE1D8:
rts
LE1D9:
stx $C9
pla
pla
tya
jmp L2B1C
.endif