added AIM-65

This commit is contained in:
Martin Hoffmann-Vetter 2014-02-13 22:40:56 -08:00 committed by Michael Steil
parent df1bc2a243
commit 440442981d
27 changed files with 391 additions and 40 deletions

19
aim65.cfg Normal file
View File

@ -0,0 +1,19 @@
MEMORY {
ZP: start = $0000, size = $0100, type = rw;
BASROM: start = $B000, size = $2000, fill = no, file = %O;
DUMMY: start = $0000, size = $00FF, file = "";
}
SEGMENTS {
ZEROPAGE: load = ZP, type = zp;
HEADER: load = BASROM, type = ro;
VECTORS: load = BASROM, type = ro;
KEYWORDS: load = BASROM, type = ro;
ERROR: load = BASROM, type = ro;
CODE: load = BASROM, type = ro;
CHRGET: load = BASROM, type = ro;
INIT: load = BASROM, type = ro;
EXTRA: load = BASROM, type = ro;
DUMMY: load = DUMMY; # don't include
}

5
aim65_extra.s Normal file
View File

@ -0,0 +1,5 @@
.segment "EXTRA"
LCFFA:
jsr CHRGOT
jmp LB89D

18
aim65_iscntc.s Normal file
View File

@ -0,0 +1,18 @@
.segment "CODE"
ISCNTC:
lda DRA2
pha
lda #$7f
sta DRA2
pha
pla
lda DRB2
rol a
pla
sta DRA2
bcs RET2
jsr GETKEY
lda #$03
cmp #$03
;!!! runs into "STOP"

51
aim65_loadsave.s Normal file
View File

@ -0,0 +1,51 @@
.segment "CODE"
SAVE:
pha
jsr WHEREO
jsr OUTSP
lda #$ff
jmp LB4BF
MONRDKEY:
lda INFLG
jsr COUT5
bne LOAD2
jmp INALL
LOAD2:
jmp CUREAD
MONCOUT:
pha
lda OUTFLG
jsr COUT5
bne COUT3
pla
jmp OUTALL
COUT3:
pla
cmp #LF
beq COUT6
cmp #CR
beq COUT4
jmp OUTPUT
COUT4:
jsr CRCK
lda #CR
rts
COUT5:
cmp #$54
beq COUT6
cmp #$55
beq COUT6
cmp #$4C
COUT6:
rts
MONRDKEY2:
jsr ROONEK
tya
beq COUT5
jmp GETKY

View File

@ -19,6 +19,9 @@ KBD := 1
.elseif .def(microtan) .elseif .def(microtan)
MICROTAN := 1 MICROTAN := 1
.include "defines_microtan.s" .include "defines_microtan.s"
.elseif .def(aim65)
AIM65 := 1
.include "defines_aim65.s"
.endif .endif
.ifdef CONFIG_2C .ifdef CONFIG_2C
@ -42,6 +45,7 @@ CONFIG_10A := 1
.ifdef CONFIG_SMALL .ifdef CONFIG_SMALL
BYTES_FP := 4 BYTES_FP := 4
CONFIG_SMALL_ERROR := 1
.else .else
BYTES_FP := 5 BYTES_FP := 5
.endif .endif
@ -60,6 +64,9 @@ MAX_EXPON = 10
.endif .endif
STACK := $0100 STACK := $0100
.ifndef STACK2
STACK2 := STACK
.endif
.ifdef INPUTBUFFER .ifdef INPUTBUFFER
.if INPUTBUFFER >= $0100 .if INPUTBUFFER >= $0100

59
defines_aim65.s Normal file
View File

@ -0,0 +1,59 @@
; configuration
CONFIG_2A := 1
CONFIG_NULL := 1
CONFIG_PRINT_CR := 1 ; print CR when line end reached
CONFIG_SAFE_NAMENOTFOUND := 1
CONFIG_SCRTCH_ORDER := 1
CONFIG_PEEK_SAVE_LINNUM := 1
CONFIG_SMALL_ERROR := 1
; zero page
ZP_START1 = $00
ZP_START2 = $10
ZP_START3 = $06
ZP_START4 = $5E
;extra ZP variables
USR := $03
TXPSV := LASTOP
NULL := IQERR
; inputbuffer
INPUTBUFFER := $0016
;extra stack
STACK2 := $0200
; constants
STACK_TOP := $FD
SPACE_FOR_GOSUB := $44
NULL_MAX := $F2 ; probably different in original version; the image I have seems
CRLF_1 := CR
CRLF_2 := LF
WIDTH := 20
WIDTH2 := 10
; memory layout
RAMSTART2 := $0211
; monitor functions
PRIFLG := $A411
INFLG := $A412
OUTFLG := $A413
DRA2 := $A480
DRB2 := $A482
DU13 := $E520
PSLS := $E7DC
LOAD := $E848
WHEREO := $E871
OUTPUT := $E97A
INALL := $E993
OUTALL := $E9BC
CRCK := $EA24
GETKEY := $EC40
GETKY := $EC43
ROONEK := $ECEF
CUREAD := $FE83

View File

@ -1,6 +1,6 @@
init_error_table init_error_table
.ifdef CONFIG_SMALL .ifdef CONFIG_SMALL_ERROR
define_error ERR_NOFOR, "NF" define_error ERR_NOFOR, "NF"
define_error ERR_SYNTAX, "SN" define_error ERR_SYNTAX, "SN"
define_error ERR_NOGOSUB, "RG" define_error ERR_NOGOSUB, "RG"

View File

@ -18,4 +18,8 @@
.ifdef MICROTAN .ifdef MICROTAN
.include "microtan_extra.s" .include "microtan_extra.s"
.endif
.ifdef AIM65
.include "aim65_extra.s"
.endif .endif

30
float.s
View File

@ -1428,7 +1428,7 @@ FOUT1:
bpl L3C73 bpl L3C73
lda #$2D lda #$2D
L3C73: L3C73:
sta $FF,y sta STACK2-1,y
sta FACSIGN sta FACSIGN
sty STRNG2 sty STRNG2
iny iny
@ -1509,12 +1509,12 @@ L3CDF:
ldy STRNG2 ldy STRNG2
lda #$2E lda #$2E
iny iny
sta $FF,y sta STACK2-1,y
txa txa
beq L3CF0 beq L3CF0
lda #$30 lda #$30
iny iny
sta $FF,y sta STACK2-1,y
L3CF0: L3CF0:
sty STRNG2 sty STRNG2
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@ -1564,12 +1564,12 @@ L3D23:
iny iny
tax tax
and #$7F and #$7F
sta $FF,y sta STACK2-1,y
dec INDX dec INDX
bne L3D3E bne L3D3E
lda #$2E lda #$2E
iny iny
sta $FF,y sta STACK2-1,y
L3D3E: L3D3E:
sty STRNG2 sty STRNG2
ldy VARPNT ldy VARPNT
@ -1591,7 +1591,7 @@ L3D3E:
LDD96: LDD96:
ldy STRNG2 ldy STRNG2
L3D4E: L3D4E:
lda $FF,y lda STACK2-1,y
dey dey
cmp #$30 cmp #$30
beq L3D4E beq L3D4E
@ -1609,9 +1609,9 @@ L3D5B:
tax tax
lda #$2D lda #$2D
L3D6B: L3D6B:
sta STACK+1,y sta STACK2+1,y
lda #$45 lda #$45
sta STACK,y sta STACK2,y
txa txa
ldx #$2F ldx #$2F
sec sec
@ -1620,20 +1620,20 @@ L3D77:
sbc #$0A sbc #$0A
bcs L3D77 bcs L3D77
adc #$3A adc #$3A
sta STACK+3,y sta STACK2+3,y
txa txa
sta STACK+2,y sta STACK2+2,y
lda #$00 lda #$00
sta STACK+4,y sta STACK2+4,y
beq L3D94 beq L3D94
FOUT4: FOUT4:
sta $FF,y sta STACK2-1,y
L3D8F: L3D8F:
lda #$00 lda #$00
sta STACK,y sta STACK2,y
L3D94: L3D94:
lda #$00 lda #<STACK2
ldy #$01 ldy #>STACK2
rts rts
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------

View File

@ -299,6 +299,7 @@ LE68E:
rts rts
.endif .endif
.ifndef AIM65
.if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS) .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
; CBM1 has the keyword removed, ; CBM1 has the keyword removed,
; but the code is still here ; but the code is still here
@ -319,3 +320,4 @@ CLEAR:
bne RET1 bne RET1
jmp CLEARC jmp CLEARC
.endif .endif
.endif

View File

@ -3,3 +3,8 @@
jmp LE68C jmp LE68C
.byte $00,$13,$56 .byte $00,$13,$56
.endif .endif
.ifdef AIM65
jmp COLD_START
jmp RESTART
.word AYINT,GIVAYF
.endif

69
init.s
View File

@ -10,9 +10,11 @@ FNDLIN2:
PR_WRITTEN_BY: PR_WRITTEN_BY:
.ifndef KBD .ifndef KBD
.ifndef CONFIG_CBM_ALL .ifndef CONFIG_CBM_ALL
.ifndef AIM65
lda #<QT_WRITTEN_BY lda #<QT_WRITTEN_BY
ldy #>QT_WRITTEN_BY ldy #>QT_WRITTEN_BY
jsr STROUT jsr STROUT
.endif
.endif .endif
.endif .endif
COLD_START: COLD_START:
@ -34,6 +36,8 @@ COLD_START:
.endif .endif
.ifdef CONFIG_NO_INPUTBUFFER_ZP .ifdef CONFIG_NO_INPUTBUFFER_ZP
ldx #$FB ldx #$FB
.elseif .def(AIM65)
ldx #$FE
.endif .endif
txs txs
.ifndef CONFIG_CBM_ALL .ifndef CONFIG_CBM_ALL
@ -41,6 +45,7 @@ COLD_START:
ldy #>COLD_START ldy #>COLD_START
sta GORESTART+1 sta GORESTART+1
sty GORESTART+2 sty GORESTART+2
.ifndef AIM65
sta GOSTROUT+1 sta GOSTROUT+1
sty GOSTROUT+2 sty GOSTROUT+2
lda #<AYINT lda #<AYINT
@ -51,12 +56,18 @@ COLD_START:
ldy #>GIVAYF ldy #>GIVAYF
sta GOGIVEAYF sta GOGIVEAYF
sty GOGIVEAYF+1 sty GOGIVEAYF+1
.endif
.endif .endif
lda #$4C lda #$4C
.ifdef CONFIG_CBM_ALL .ifdef CONFIG_CBM_ALL
sta JMPADRS sta JMPADRS
.endif .endif
sta GORESTART sta GORESTART
.ifdef AIM65
sta JMPADRS
sta ATN
sta GOSTROUT
.else
.ifndef CONFIG_CBM_ALL .ifndef CONFIG_CBM_ALL
sta GOSTROUT sta GOSTROUT
sta JMPADRS sta JMPADRS
@ -64,6 +75,7 @@ COLD_START:
.if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL)) .if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL))
sta USR sta USR
.endif .endif
.endif
.ifndef CONFIG_RAM .ifndef CONFIG_RAM
.ifdef APPLE .ifdef APPLE
@ -73,8 +85,15 @@ COLD_START:
lda #<IQERR lda #<IQERR
ldy #>IQERR ldy #>IQERR
.endif .endif
.ifdef AIM65
sta ATN+1
sty ATN+2
sta GOSTROUT+1
sty GOSTROUT+2
.else
sta USR+1 sta USR+1
sty USR+2 sty USR+2
.endif
.endif .endif
.ifndef CBM1 .ifndef CBM1
lda #WIDTH lda #WIDTH
@ -82,7 +101,7 @@ COLD_START:
lda #WIDTH2 lda #WIDTH2
sta Z18 sta Z18
.endif .endif
.endif /* KBD */ .endif
; All non-CONFIG_SMALL versions of BASIC have ; All non-CONFIG_SMALL versions of BASIC have
; the same bug here: While the number of bytes ; the same bug here: While the number of bytes
@ -125,19 +144,23 @@ L4098:
sta CURDVC sta CURDVC
.endif .endif
sta LASTPT+1 sta LASTPT+1
.ifndef AIM65
.if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS) .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS)
sta Z15 sta Z15
.endif .endif
.endif
.ifndef CONFIG_11 .ifndef CONFIG_11
sta POSX sta POSX
.endif .endif
pha pha
sta Z14 sta Z14
.ifndef CBM2 .ifndef CBM2
.ifndef AIM65
.ifndef MICROTAN .ifndef MICROTAN
lda #$03 lda #$03
sta DSCLEN sta DSCLEN
.endif .endif
.endif
.ifndef CONFIG_11 .ifndef CONFIG_11
lda #$2C lda #$2C
sta LINNUM+1 sta LINNUM+1
@ -168,8 +191,10 @@ L4098:
stx TXTPTR stx TXTPTR
sty TXTPTR+1 sty TXTPTR+1
jsr CHRGET jsr CHRGET
.ifndef AIM65
cmp #$41 cmp #$41
beq PR_WRITTEN_BY beq PR_WRITTEN_BY
.endif
tay tay
bne L40EE bne L40EE
.endif .endif
@ -202,6 +227,12 @@ L40D7:
; optimized version of the CBM1 code ; optimized version of the CBM1 code
bmi L40FA bmi L40FA
.endif .endif
.if .def(AIM65)
; AIM65: hard RAM top limit is $A000
lda LINNUM+1
cmp #$A0
beq L40FA
.endif
L40DD: L40DD:
.ifdef CONFIG_2 .ifdef CONFIG_2
lda #$55 ; 01010101 / 10101010 lda #$55 ; 01010101 / 10101010
@ -236,7 +267,7 @@ L40FA:
ldy LINNUM+1 ldy LINNUM+1
sta MEMSIZ sta MEMSIZ
sty MEMSIZ+1 sty MEMSIZ+1
.ifndef MICROTAN .if !(.def(MICROTAN) || .def(AIM65))
sta FRETOP sta FRETOP
sty FRETOP+1 sty FRETOP+1
.endif .endif
@ -267,10 +298,18 @@ L4106:
L2829: L2829:
sta Z17 sta Z17
L4129: L4129:
.ifdef AIM65
sbc #$0A
.else
sbc #$0E sbc #$0E
.endif
bcs L4129 bcs L4129
eor #$FF eor #$FF
.ifdef AIM65
sbc #$08
.else
sbc #$0C sbc #$0C
.endif
clc clc
adc Z17 adc Z17
sta Z18 sta Z18
@ -355,6 +394,12 @@ L4192:
.endif .endif
.ifdef CONFIG_CBM_ALL .ifdef CONFIG_CBM_ALL
jmp RESTART jmp RESTART
.elseif .def(AIM65)
lda #<CRDO
ldy #>CRDO
sta GORESTART+1
sty GORESTART+2
jmp RESTART
.else .else
lda #<STROUT lda #<STROUT
ldy #>STROUT ldy #>STROUT
@ -379,6 +424,7 @@ QT_WANT:
.endif .endif
QT_WRITTEN_BY: QT_WRITTEN_BY:
.ifndef CONFIG_CBM_ALL .ifndef CONFIG_CBM_ALL
.ifndef AIM65
.ifdef APPLE .ifdef APPLE
asc80 "COPYRIGHT 1977 BY MICROSOFT CO" asc80 "COPYRIGHT 1977 BY MICROSOFT CO"
.byte CR,0 .byte CR,0
@ -391,11 +437,15 @@ QT_WRITTEN_BY:
.endif .endif
.byte CR,LF,0 .byte CR,LF,0
.endif .endif
.endif
QT_MEMORY_SIZE: QT_MEMORY_SIZE:
.byte "MEMORY SIZE" .byte "MEMORY SIZE"
.byte 0 .byte 0
QT_TERMINAL_WIDTH: QT_TERMINAL_WIDTH:
.byte "TERMINAL WIDTH" .ifndef AIM65
.byte "TERMINAL "
.endif
.byte "WIDTH"
.byte 0 .byte 0
.endif .endif
QT_BYTES_FREE: QT_BYTES_FREE:
@ -418,6 +468,9 @@ QT_BASIC:
.ifdef MICROTAN .ifdef MICROTAN
.byte "MICROTAN BASIC" .byte "MICROTAN BASIC"
.endif .endif
.ifdef AIM65
.byte " AIM 65 BASIC V1.1"
.endif
.ifdef CBM1 .ifdef CBM1
.byte $13 ; HOME .byte $13 ; HOME
.byte "*** COMMODORE BASIC ***" .byte "*** COMMODORE BASIC ***"
@ -435,9 +488,15 @@ QT_BASIC:
.byte CR,LF .byte CR,LF
.ifdef MICROTAN .ifdef MICROTAN
.byte "(C) 1980 MICROSOFT" .byte "(C) 1980 MICROSOFT"
.elseif .def(AIM65)
.byte 0
.byte "(C) 1978 MICROSOFT"
.else .else
.byte "COPYRIGHT 1977 BY MICROSOFT CO." .byte "COPYRIGHT 1977 BY MICROSOFT CO."
.endif .endif
.byte CR,LF,0 .byte CR,LF
.ifndef AIM65
.byte 0
.endif
.endif .endif
.endif /* KBD */ .endif

View File

@ -6,7 +6,15 @@ L2420:
jsr OUTDO jsr OUTDO
.endif .endif
dex dex
.ifdef AIM65
bmi L2423
jsr PSLS
jmp INLIN2
LB35F:
jsr OUTDO
.else
bpl INLIN2 bpl INLIN2
.endif
L2423: L2423:
.ifdef OSI .ifdef OSI
jsr OUTDO jsr OUTDO
@ -39,6 +47,13 @@ L0C32:
ldx #$00 ldx #$00
INLIN2: INLIN2:
jsr GETLN jsr GETLN
.ifdef AIM65
cmp #$1A
bne INLINAIM
jsr DU13
jmp INLIN
INLINAIM:
.endif
.ifndef CONFIG_NO_LINE_EDITING .ifndef CONFIG_NO_LINE_EDITING
cmp #$07 cmp #$07
beq L2443 beq L2443
@ -47,14 +62,25 @@ INLIN2:
beq L2453 beq L2453
.ifndef CONFIG_NO_LINE_EDITING .ifndef CONFIG_NO_LINE_EDITING
cmp #$20 cmp #$20
.ifdef AIM65
bcc L244E
.else
bcc INLIN2 bcc INLIN2
.endif
.ifdef MICROTAN .ifdef MICROTAN
cmp #$80 cmp #$80
.else .else
.ifdef AIM65
cmp #$7F
beq L2420
.endif
cmp #$7D cmp #$7D
.endif .endif
bcs INLIN2 bcs INLIN2
cmp #$40 ; @ cmp #$40 ; @
.ifdef AIM65
beq LB35F
.else
beq L2423 beq L2423
.ifdef MICROTAN .ifdef MICROTAN
cmp #$7F ; DEL cmp #$7F ; DEL
@ -62,6 +88,7 @@ INLIN2:
cmp #$5F ; _ cmp #$5F ; _
.endif .endif
beq L2420 beq L2420
.endif
L2443: L2443:
.ifdef MICROTAN .ifdef MICROTAN
cpx #$4F cpx #$4F
@ -73,6 +100,9 @@ L2443:
sta INPUTBUFFER,x sta INPUTBUFFER,x
inx inx
.ifdef OSI .ifdef OSI
.byte $2C
.elseif .def(AIM65)
.byte $2C .byte $2C
.else .else
bne INLIN2 bne INLIN2
@ -80,6 +110,7 @@ L2443:
L244C: L244C:
.ifndef CONFIG_NO_LINE_EDITING .ifndef CONFIG_NO_LINE_EDITING
lda #$07 ; BEL lda #$07 ; BEL
L244E:
jsr OUTDO jsr OUTDO
bne INLIN2 bne INLIN2
.endif .endif
@ -115,7 +146,7 @@ GETLN:
nop nop
and #$7F and #$7F
.endif .endif
.endif /* APPLE */ .endif
.ifdef APPLE .ifdef APPLE
RDKEY: RDKEY:
jsr LFD0C jsr LFD0C
@ -130,4 +161,4 @@ RDKEY:
pla pla
L2465: L2465:
rts rts
.endif /* KBD */ .endif

10
input.s
View File

@ -111,6 +111,11 @@ LCAE0:
INPUT: INPUT:
.ifndef KBD .ifndef KBD
lsr Z14 lsr Z14
.endif
.ifdef AIM65
lda PRIFLG
sta ZBE
jsr LCFFA
.endif .endif
cmp #$22 cmp #$22
bne L2A9E bne L2A9E
@ -231,6 +236,8 @@ PROCESS_INPUT_ITEM:
bvc L2AF0 bvc L2AF0
.ifdef MICROTAN .ifdef MICROTAN
jsr MONRDKEY2 jsr MONRDKEY2
.elseif .def(AIM65)
jsr MONRDKEY2
.else .else
jsr MONRDKEY jsr MONRDKEY
.endif .endif
@ -392,6 +399,9 @@ INPDONE:
jmp SETDA jmp SETDA
L2B94: L2B94:
ldy #$00 ldy #$00
.ifdef AIM65
jsr LB8B1
.endif
lda (INPTR),y lda (INPTR),y
beq L2BA1 beq L2BA1
.ifdef CONFIG_FILE .ifdef CONFIG_FILE

View File

@ -20,4 +20,7 @@
.ifdef MICROTAN .ifdef MICROTAN
.include "microtan_iscntc.s" .include "microtan_iscntc.s"
.endif .endif
.ifdef AIM65
.include "aim65_iscntc.s"
.endif
;!!! runs into "STOP" ;!!! runs into "STOP"

View File

@ -9,3 +9,6 @@
.ifdef MICROTAN .ifdef MICROTAN
.include "microtan_loadsave.s" .include "microtan_loadsave.s"
.endif .endif
.ifdef AIM65
.include "aim65_loadsave.s"
.endif

View File

@ -2,7 +2,7 @@ if [ ! -d tmp ]; then
mkdir tmp mkdir tmp
fi fi
for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan; do for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65; do
echo $i echo $i
ca65 -D $i msbasic.s -o tmp/$i.o && ca65 -D $i msbasic.s -o tmp/$i.o &&

View File

@ -30,6 +30,7 @@ OKPRT:
rts rts
nop nop
.else .else
.ifndef AIM65
QT_OK: QT_OK:
.ifdef CONFIG_CBM_ALL .ifdef CONFIG_CBM_ALL
.byte CR,LF,"READY.",CR,LF .byte CR,LF,"READY.",CR,LF
@ -42,15 +43,15 @@ QT_OK:
.endif .endif
.endif .endif
.byte 0 .byte 0
.endif
.endif .endif
QT_BREAK: QT_BREAK:
.ifdef KBD .ifdef KBD
.byte CR,LF," Brk" .byte CR,LF," Brk"
.byte 0 .byte 0
.byte $54,$D0 ; ??? .byte $54,$D0 ; ???
.elseif .def(MICROTAN) .elseif .def(MICROTAN) || .def(AIM65)
.byte CR,LF," BREAK" .byte CR,LF," BREAK"
.byte 0 .byte 0
.else .else

10
misc1.s
View File

@ -203,7 +203,17 @@ L2963:
iny iny
lda (DSCPTR),y lda (DSCPTR),y
sta (FORPNT),y sta (FORPNT),y
RET5:
rts rts
.ifdef AIM65
LB89D:
cmp #$21
bne RET5
lda #$80
sta PRIFLG
jmp CHRGET
.endif
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
PRINTH: PRINTH:
jsr CMD jsr CMD

BIN
orig/aim65.bin Normal file

Binary file not shown.

2
poke.s
View File

@ -115,4 +115,4 @@ L362C:
beq L362C beq L362C
RTS3: RTS3:
rts rts
.endif /* KBD */ .endif

28
print.s
View File

@ -1,5 +1,16 @@
.segment "CODE" .segment "CODE"
.ifdef AIM65
PRINT:
lda PRIFLG
sta ZBE
jsr L297E
LB8B1:
lda ZBE
sta PRIFLG
rts
.endif
PRSTRING: PRSTRING:
jsr STRPRT jsr STRPRT
L297E: L297E:
@ -8,10 +19,16 @@ L297E:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "PRINT" STATEMENT ; "PRINT" STATEMENT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifndef AIM65
PRINT: PRINT:
.endif
beq CRDO beq CRDO
PRINT2: PRINT2:
beq L29DD beq L29DD
.ifdef AIM65
jsr LB89D
beq L29DD
.endif
cmp #TOKEN_TAB cmp #TOKEN_TAB
beq L29F5 beq L29F5
cmp #TOKEN_SPC cmp #TOKEN_SPC
@ -119,6 +136,10 @@ PRINTNULLS:
lda #$00 lda #$00
sta POSX sta POSX
eor #$FF eor #$FF
.elseif .def(AIM65)
lda #$00
sta POSX
eor #$FF
.else .else
.if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS) .if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
@ -167,7 +188,7 @@ L29EA:
.endif .endif
sec sec
L29EB: L29EB:
.ifdef CONFIG_CBM_ALL .if .def(CONFIG_CBM_ALL) || .def(AIM65)
sbc #$0A sbc #$0A
.else .else
.ifdef KBD .ifdef KBD
@ -327,7 +348,10 @@ LCA6A:
lda POSX lda POSX
cmp Z17 cmp Z17
bne L2A4C bne L2A4C
.ifdef APPLE .ifdef AIM65
lda #$00
sta POSX
.elseif .def(APPLE)
nop ; PATCH! nop ; PATCH!
nop ; don't print CR nop ; don't print CR
nop nop

View File

@ -32,12 +32,12 @@ LC366:
jsr OUTQUES jsr OUTQUES
L2329: L2329:
lda ERROR_MESSAGES,x lda ERROR_MESSAGES,x
.ifndef CONFIG_SMALL .ifndef CONFIG_SMALL_ERROR
pha pha
and #$7F and #$7F
.endif .endif
jsr OUTDO jsr OUTDO
.ifdef CONFIG_SMALL .ifdef CONFIG_SMALL_ERROR
lda ERROR_MESSAGES+1,x lda ERROR_MESSAGES+1,x
.ifdef KBD .ifdef KBD
and #$7F and #$7F
@ -79,6 +79,7 @@ LE28E:
bpl RESTART bpl RESTART
.else .else
lsr Z14 lsr Z14
.ifndef AIM65
lda #<QT_OK lda #<QT_OK
ldy #>QT_OK ldy #>QT_OK
.ifdef CONFIG_CBM_ALL .ifdef CONFIG_CBM_ALL
@ -86,6 +87,9 @@ LE28E:
.else .else
jsr GOSTROUT jsr GOSTROUT
.endif .endif
.else
jsr GORESTART
.endif
L2351: L2351:
jsr INLIN jsr INLIN
.endif .endif
@ -639,9 +643,20 @@ LIST:
L25A6: L25A6:
jsr CRDO jsr CRDO
.else .else
.ifdef AIM65
pha
lda #$00
LB4BF:
sta INPUTFLG
pla
.endif
.ifdef MICROTAN .ifdef MICROTAN
php php
jmp LE21C ; patch jmp LE21C ; patch
LC57E:
.elseif .def(AIM65)
php
jsr LINGET
LC57E: LC57E:
.else .else
bcc L2581 bcc L2581
@ -652,12 +667,12 @@ L2581:
jsr LINGET jsr LINGET
.endif .endif
jsr FNDLIN jsr FNDLIN
.ifdef MICROTAN .if .def(MICROTAN) || .def(AIM65)
plp plp
beq L2598 beq L2598
.endif .endif
jsr CHRGOT jsr CHRGOT
.ifdef MICROTAN .if .def(MICROTAN) || .def(AIM65)
beq L25A6 beq L25A6
.else .else
beq L2598 beq L2598
@ -665,7 +680,7 @@ L2581:
cmp #TOKEN_MINUS cmp #TOKEN_MINUS
bne L2520 bne L2520
jsr CHRGET jsr CHRGET
.ifdef MICROTAN .if .def(MICROTAN) || .def(AIM65)
beq L2598 beq L2598
jsr LINGET jsr LINGET
beq L25A6 beq L25A6
@ -675,7 +690,7 @@ L2581:
bne L2520 bne L2520
.endif .endif
L2598: L2598:
.ifndef MICROTAN .if !(.def(MICROTAN) || .def(AIM65))
pla pla
pla pla
lda LINNUM lda LINNUM
@ -686,7 +701,7 @@ L2598:
sta LINNUM sta LINNUM
sta LINNUM+1 sta LINNUM+1
L25A6: L25A6:
.ifdef MICROTAN .if .def(MICROTAN) || .def(AIM65)
pla pla
pla pla
.endif .endif
@ -749,12 +764,22 @@ LA519:
lda (LOWTRX),y lda (LOWTRX),y
stx LOWTRX stx LOWTRX
sta LOWTRX+1 sta LOWTRX+1
.ifdef MICROTAN .if .def(MICROTAN) || .def(AIM65)
bne L25A6X bne L25A6X
.else .else
bne L25A6 bne L25A6
.endif .endif
L25E5: L25E5:
.ifdef AIM65
lda INPUTFLG
beq L25E5a
jsr CRDO
jsr CRDO
lda #$1a
jsr OUTDO
jsr $e50a
L25E5a:
.endif
jmp RESTART jmp RESTART
L25E8: L25E8:
bpl L25CE bpl L25CE

View File

@ -5,7 +5,7 @@ if [ ! -d orig ]; then
exit; exit;
fi fi
for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan; do for i in cbmbasic1 cbmbasic2 kbdbasic osi kb9 applesoft microtan aim65; do
echo $i echo $i
ca65 -D $i msbasic.s -o tmp/$i.o && ca65 -D $i msbasic.s -o tmp/$i.o &&

View File

@ -9,9 +9,13 @@ STR:
pla pla
pla pla
LD353: LD353:
lda #$FF lda #<(STACK2-1)
ldy #$00 ldy #>(STACK2-1)
.if STACK2 > $0100
bne STRLIT
.else
beq STRLIT beq STRLIT
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE ; GET SPACE AND MAKE DESCRIPTOR FOR STRING WHOSE
@ -85,6 +89,9 @@ L32B6:
.ifdef CONFIG_NO_INPUTBUFFER_ZP .ifdef CONFIG_NO_INPUTBUFFER_ZP
beq LD399 beq LD399
cmp #>INPUTBUFFER cmp #>INPUTBUFFER
.elseif .def(AIM65)
beq LD399
cmp #$01
.endif .endif
bne PUTNEW bne PUTNEW
LD399: LD399:

2
trig.s
View File

@ -130,6 +130,7 @@ MICROSOFT:
.endif .endif
.endif .endif
.ifndef AIM65
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "ATN" FUNCTION ; "ATN" FUNCTION
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@ -199,3 +200,4 @@ POLY_ATN:
.if .def(CONFIG_11A) && (!.def(CONFIG_2)) .if .def(CONFIG_11A) && (!.def(CONFIG_2))
.byte $00 ; XXX .byte $00 ; XXX
.endif .endif
.endif

View File

@ -180,6 +180,12 @@ SGNCPR = STRNG1
FACEXTENSION = STRNG1+1 FACEXTENSION = STRNG1+1
STRNG2: STRNG2:
.res 2 .res 2
.ifdef AIM65
ATN:
.res 3
ZBE:
.res 1
.endif
CHRGET: CHRGET:
TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET) TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET)
CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET) CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET)