1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-07 18:25:03 +00:00

Fixing more PLASMA16 bugs

This commit is contained in:
David Schmenk
2017-11-30 18:24:58 -08:00
parent 3b0e0fb861
commit 944905e965
2 changed files with 180 additions and 151 deletions

View File

@@ -63,69 +63,69 @@ word textmode = @a2textmode
// Common routines. // Common routines.
// //
asm equates asm equates
!SOURCE "vmsrc/plvmzp.inc" !SOURCE "vmsrc/plvmzp.inc"
end end
// //
// def grscrn(rowaddrs) // def grscrn(rowaddrs)
// //
asm grscrn(rowaddrs)#0 asm grscrn(rowaddrs)#0
GRSCRN = $26 GRSCRN = $26
GRSCRNL = GRSCRN GRSCRNL = GRSCRN
GRSCRNH = GRSCRNL+1 GRSCRNH = GRSCRNL+1
LDA ESTKL,X LDA ESTKL,X
STA GRSCRNL STA GRSCRNL
LDA ESTKH,X LDA ESTKH,X
STA GRSCRNH STA GRSCRNH
INX INX
RTS RTS
end end
// //
// def grcolor(color) // def grcolor(color)
// //
asm grcolor(color)#0 asm grcolor(color)#0
GRCLR = $30 GRCLR = $30
LDA #$0F LDA #$0F
AND ESTKL,X AND ESTKL,X
STA GRCLR STA GRCLR
ASL ASL
ASL ASL
ASL ASL
ASL ASL
ORA GRCLR ORA GRCLR
STA GRCLR STA GRCLR
INX INX
RTS RTS
end end
// //
// def grplot(x, y) // def grplot(x, y)
// //
asm grplot(x, y)#0 asm grplot(x, y)#0
STY IPY STY IPY
LDA ESTKL,X LDA ESTKL,X
AND #$FE AND #$FE
CMP ESTKL,X CMP ESTKL,X
TAY TAY
LDA (GRSCRN),Y LDA (GRSCRN),Y
STA DSTL STA DSTL
INY INY
LDA (GRSCRN),Y LDA (GRSCRN),Y
STA DSTH STA DSTH
LDA #$FF LDA #$FF
ADC #$00 ADC #$00
EOR #$0F EOR #$0F
TAY TAY
AND GRCLR AND GRCLR
STA TMPL STA TMPL
TYA TYA
EOR #$FF EOR #$FF
LDY ESTKL+1,X LDY ESTKL+1,X
AND (DST),Y AND (DST),Y
ORA TMPL ORA TMPL
STA (DST),Y STA (DST),Y
LDY IPY LDY IPY
INX INX
INX INX
RTS RTS
end end
// //
// Apple II routines. // Apple II routines.
@@ -228,27 +228,27 @@ def rod#0
byte i, j, k, w, fmi, fmk, color byte i, j, k, w, fmi, fmk, color
while TRUE while TRUE
for w = 3 to 50 for w = 3 to 50
for i = 1 to 19 for i = 1 to 19
for j = 0 to 19 for j = 0 to 19
k = i + j k = i + j
color = (j * 3) / (i + 3) + i * w / 12 color = (j * 3) / (i + 3) + i * w / 12
fmi = 40 - i fmi = 40 - i
fmk = 40 - k fmk = 40 - k
grcolor(color)#0 grcolor(color)#0
grplot(i, k)#0 grplot(i, k)#0
grplot(k, i)#0 grplot(k, i)#0
grplot(fmi, fmk)#0 grplot(fmi, fmk)#0
grplot(fmk, fmi)#0 grplot(fmk, fmi)#0
grplot(k, fmi)#0 grplot(k, fmi)#0
grplot(fmi, k)#0 grplot(fmi, k)#0
grplot(i, fmk)#0 grplot(i, fmk)#0
grplot(fmk, i)#0 grplot(fmk, i)#0
if keypressed()#1 if keypressed()#1
return return
fin fin
next next
next next
next next
loop loop
end end
// //
@@ -257,18 +257,18 @@ end
when MACHID & $C8 when MACHID & $C8
is $08 // Apple 1 is $08 // Apple 1
puts(@a1err) puts(@a1err)
return return
is $C0 // Apple /// is $C0 // Apple ///
keypressed = @a3keypressed keypressed = @a3keypressed
gotoxy = @a3gotoxy gotoxy = @a3gotoxy
grmode = @a3grmode grmode = @a3grmode
textmode = @a3textmode textmode = @a3textmode
if modaddr(@cmdsys):0 == $0010 if modaddr(@cmdsys):0 == $0010
devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys devcons = modaddr(@cmdsys).5 // devcons variable from cmdsys
else else
puts(@a3err) puts(@a3err)
return return
fin fin
otherwise // Apple ][ otherwise // Apple ][
wend wend
grmode(MIXMODE)#0 grmode(MIXMODE)#0

View File

@@ -51,8 +51,8 @@ ALTWROFF= $C004
ALTWRON = $C005 ALTWRON = $C005
!SOURCE "vmsrc/plvmzp.inc" !SOURCE "vmsrc/plvmzp.inc"
HWSP = TMPH+1 HWSP = TMPH+1
DROP = $EE DROP = $EF
NEXTOP = $EF NEXTOP = DROP+1
FETCHOP = NEXTOP+3 FETCHOP = NEXTOP+3
IP = FETCHOP+1 IP = FETCHOP+1
IPL = IP IPL = IP
@@ -321,6 +321,10 @@ CMDENTRY = *
BIT $C051 BIT $C051
BIT $C05F BIT $C05F
JSR $FC58 ; HOME JSR $FC58 ; HOME
!IF DEBUG {
LDA #20 ; SET TEXT WINDOW ABOVE DEBUG OUTPUT
STA $23
}
; ;
; INSTALL PAGE 0 FETCHOP ROUTINE ; INSTALL PAGE 0 FETCHOP ROUTINE
; ;
@@ -403,14 +407,14 @@ PAGE0 = *
;* * ;* *
;****************************** ;******************************
!PSEUDOPC DROP { !PSEUDOPC DROP {
PLA ; DROP @ $EE PLA ; DROP @ $EF
INY ; NEXTOP @ $EF INY ; NEXTOP @ $F0
BEQ NEXTOPH BEQ NEXTOPH
LDX $FFFF,Y ; FETCHOP @ $F2, IP MAPS OVER $FFFF @ $F3 LDX $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4
JMP (OPTBL,X) ; OPIDX AND OPPAGE MAP OVER OPTBL JMP (OPTBL,X) ; OPIDX AND OPPAGE MAP OVER OPTBL
NEXTOPH SEP #$20 ; SET 8 BIT MODE NEXTOPH LDX IPH
INC IPH INX
REP #$20 ; SET 16 BIT MODE STX IPH
BRA FETCHOP BRA FETCHOP
} }
PAGE3 = * PAGE3 = *
@@ -480,6 +484,19 @@ PRCHR ORA #$80
STA $7D0,X STA $7D0,X
INX INX
RTS RTS
PRBYTE PHA
LDA #'$'
JSR PRCHR
PLA
JMP PRHEX
PRWORD PHA
LDA #'$'
JSR PRCHR
XBA
JSR PRHEX
PLA
JMP PRHEX
;***************** ;*****************
;* * ;* *
;* DEBUG TABLE * ;* DEBUG TABLE *
@@ -499,6 +516,9 @@ DBGTBL !WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 00 02 04 06 08
;* DEBUG STEP ROUTINE ;* DEBUG STEP ROUTINE
;* ;*
STEP STX TMPL STEP STX TMPL
LDX $C013 ; SAVE RAMRD
STX $C002
STX TMPH
SEP #$20 ; 8 BIT A/M SEP #$20 ; 8 BIT A/M
!AS !AS
LDX #39 ; SCROLL PREVIOUS LINES UP LDX #39 ; SCROLL PREVIOUS LINES UP
@@ -510,9 +530,10 @@ STEP STX TMPL
STA $750,X STA $750,X
DEX DEX
BPL - BPL -
LDX #$00 BIT TMPH ; RAMRD SET?
LDA #'$' BPL +
JSR PRCHR STA $C003
+ LDX #$00
REP #$20 ; 16 BIT A/M REP #$20 ; 16 BIT A/M
!AL !AL
TYA TYA
@@ -520,43 +541,41 @@ STEP STX TMPL
ADC IP ADC IP
SEP #$20 ; 8 BIT A/M SEP #$20 ; 8 BIT A/M
!AS !AS
XBA JSR PRWORD
JSR PRHEX
XBA
JSR PRHEX
LDA #':' LDA #':'
JSR PRCHR JSR PRCHR
LDA #'$'
JSR PRCHR
LDA (IP),Y LDA (IP),Y
JSR PRHEX JSR PRBYTE
INX INX
LDA #'$'
JSR PRCHR
REP #$20 ; 16 BIT A/M REP #$20 ; 16 BIT A/M
!AL !AL
TSC TSC
SEP #$20 ; 8 BIT A/M SEP #$20 ; 8 BIT A/M
!AS !AS
XBA JSR PRWORD
JSR PRHEX
XBA
JSR PRHEX
LDA #':' LDA #':'
JSR PRCHR JSR PRCHR
TXA STX TMPH
TSX TSX
CPX HWSP CPX HWSP
BEQ + BEQ ++
TAX BCC +
LDA #'$' LDX TMPH
LDA #' '
JSR PRCHR JSR PRCHR
LDA TOS+1,S LDA #'<' ; STACK UNDERFLOW!
JSR PRHEX JSR PRCHR
LDA TOS,S JSR PRCHR
JSR PRHEX JSR PRCHR
BRA ++ JSR PRCHR
+ TAX BRA DBGKEY
+ LDA $102,X
XBA
LDA $101,X
LDX TMPH
JSR PRWORD
BRA +++
++ LDX TMPH
LDA #' ' LDA #' '
JSR PRCHR JSR PRCHR
LDA #'-' LDA #'-'
@@ -564,28 +583,31 @@ STEP STX TMPL
JSR PRCHR JSR PRCHR
JSR PRCHR JSR PRCHR
JSR PRCHR JSR PRCHR
++ ;LDX $C010 +++ ;LDX $C010
LDA #' ' LDA #' '
- JSR PRCHR - JSR PRCHR
CPX #40 CPX #40
BNE - BNE -
; LDX TMPL
; CPX #$48 ; FORCE PAUSE AT 'IS_GE'
; BEQ DBGKEY
- LDX $C000 - LDX $C000
;BPL -
;STX $C010
CPX #$9B CPX #$9B
BNE + BNE ++
STX $C010 DBGKEY STX $C010
- LDX $C000 - LDX $C000
BPL - BPL -
CPX #$9B CPX #$9B
BEQ + BEQ ++
STX $C010 STX $C010
;SEC ; SWITCH TO EMU MODE CPX #$80+'Q'
;XCE BNE ++
;BRK SEC ; SWITCH TO EMU MODE
+ REP #$20 ; 16 BIT A/M XCE
BRK
++ REP #$20 ; 16 BIT A/M
!AL !AL
LDX TMPL + LDX TMPL
DBG_OP JMP (OPTBL,X) DBG_OP JMP (OPTBL,X)
} }
;********************************************************************* ;*********************************************************************
@@ -608,7 +630,7 @@ ADD PLA
SUB LDA NOS,S SUB LDA NOS,S
SEC SEC
SBC TOS,S SBC TOS,S
STA NOS,X STA NOS,S
JMP DROP JMP DROP
;* ;*
;* SHIFT TOS LEFT BY 1, ADD TO TOS-1 ;* SHIFT TOS LEFT BY 1, ADD TO TOS-1
@@ -640,53 +662,38 @@ MULLP ASL TMP ;LSR TMP ; MULTPLR
;* ;*
;* INTERNAL DIVIDE ALGORITHM ;* INTERNAL DIVIDE ALGORITHM
;* ;*
_NEG EOR #$FFFF
INC
SEC
SBC TOS,S
STA TOS,S
RTS
_DIV STY IPY _DIV STY IPY
LDY #$11 ; #BITS+1 LDY #$11 ; #BITS+1
LDX #$00 LDX #$00
LDA TOS,S LDA TOS+2,S ; WE JSR'ED HERE SO OFFSET ACCORDINGLY
BPL + BPL +
LDX #$81 LDX #$81
EOR #$FFFF EOR #$FFFF
INC INC
STA TOS,S STA TOS+2,S
+ LDA NOS,S + LDA NOS+2,S
BPL + BPL +
INX INX
EOR #$FFFF EOR #$FFFF
INC INC
STA TMP ; NOS,S + STA TMP ; NOS,S
+ BEQ _DIVEX BEQ _DIVEX
_DIV1 ASL ; DVDND _DIV1 ASL ; DVDND
DEY DEY
BCC _DIV1 BCC _DIV1
STA TMP ;NOS,S ; DVDND STA TMP ;NOS,S ; DVDND
LDA #$0000 ; REMNDR LDA #$0000 ; REMNDR
_DIVLP ROL ; REMNDR _DIVLP ROL ; REMNDR
CMP TOS,S ; DVSR CMP TOS+2,S ; DVSR
BCC + BCC +
SBC TOS,S ; DVSR SBC TOS+2,S ; DVSR
SEC SEC
+ ROL TMP ;NOS,S ; DVDND + ROL TMP ;NOS,S ; DVDND
DEY DEY
BNE _DIVLP BNE _DIVLP
_DIVEX ;STA TMP ; REMNDR _DIVEX LDY IPY
LDY IPY
RTS RTS
;* ;*
;* NEGATE TOS
;*
NEG LDA #$0000
SEC
SBC TOS,S
STA TOS,S
JMP NEXTOP
;*
;* DIV TOS-1 BY TOS ;* DIV TOS-1 BY TOS
;* ;*
DIV JSR _DIV DIV JSR _DIV
@@ -708,6 +715,14 @@ MOD JSR _DIV
BNE NEG BNE NEG
JMP NEXTOP JMP NEXTOP
;* ;*
;* NEGATE TOS
;*
NEG LDA #$0000
SEC
SBC TOS,S
STA TOS,S
JMP NEXTOP
;*
;* INCREMENT TOS ;* INCREMENT TOS
;* ;*
INCR LDA TOS,S INCR LDA TOS,S
@@ -811,9 +826,7 @@ DUP LDA TOS,S
;* ;*
;* PRIVATE EP STASH ;* PRIVATE EP STASH
;* ;*
EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (32 SHOULD BE ENOUGH) EPSAVE !BYTE $01 ; INDEX INTO STASH ARRAY (16 SHOULD BE ENOUGH)
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
!WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 !WORD $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000
;* ;*
@@ -826,6 +839,14 @@ PUSHEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
STA EPSAVE,X STA EPSAVE,X
INX INX
INX INX
!IF DEBUG {
CPX #33
BCC +
LDX #$80+'>'
STX $7D0+30
LDX #$32
+
}
STX EPSAVE STX EPSAVE
LDX LCRDEN+LCBNK2 ; REN LC MEM LDX LCRDEN+LCBNK2 ; REN LC MEM
JMP NEXTOP JMP NEXTOP
@@ -837,6 +858,13 @@ PULLEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
LDX EPSAVE LDX EPSAVE
DEX DEX
DEX DEX
!IF DEBUG {
BPL +
LDX #$80+'<'
STX $7D0+30
LDX #$00
+
}
LDA EPSAVE,X LDA EPSAVE,X
TCS TCS
STX EPSAVE STX EPSAVE
@@ -1615,6 +1643,7 @@ RET SEP #$20 ; 8 BIT A/M
LDX $C010 LDX $C010
+ LDX TMPL + LDX TMPL
} }
TYX
REP #$20 ; 16 BIT A/M REP #$20 ; 16 BIT A/M
!AL !AL
LDA IFP ; DEALLOCATE POOL LDA IFP ; DEALLOCATE POOL