Play with pseudo (mimic 65c02)

This commit is contained in:
stid 2020-01-12 23:33:13 -08:00
parent c8ba619d33
commit 440d3caa67
8 changed files with 168 additions and 32 deletions

View File

@ -5,6 +5,7 @@
#import "../libs/print.asm" #import "../libs/print.asm"
#import "../core/keyboard.asm" #import "../core/keyboard.asm"
#import "../core/screen.asm" #import "../core/screen.asm"
#import "../core/pseudo.asm"
#import "../libs/module.asm" #import "../libs/module.asm"
#import "../progs/woz_shell.asm" #import "../progs/woz_shell.asm"
@ -23,13 +24,14 @@
// -------------------------------------------------------- // --------------------------------------------------------
init: { init: {
// Init All Modules // Init All Modules
jsr Pseudo.init
jsr Module.init
jsr Memory.init jsr Memory.init
jsr Math.init jsr Math.init
jsr Print.init jsr Print.init
jsr Keyboard.init jsr Keyboard.init
jsr Screen.init jsr Screen.init
jsr WozShell.init jsr WozShell.init
jsr Module.init
rts rts
} }
@ -42,6 +44,7 @@ toDebug: {
ModuleToDebug(module_type, module_name, version) ModuleToDebug(module_type, module_name, version)
jsr Keyboard.toDebug jsr Keyboard.toDebug
jsr Screen.toDebug jsr Screen.toDebug
jsr Pseudo.toDebug
jsr Module.toDebug jsr Module.toDebug
jsr Memory.toDebug jsr Memory.toDebug
jsr Print.toDebug jsr Print.toDebug

View File

@ -1,17 +1,25 @@
.filenamespace MemMap .filenamespace MemMap
#importonce #importonce
.const SHELL_BUGGER_ADDR = $3000
.const XSTACK_ADDRESS = $3100
.const YSTACK_ADDRESS = $3200
*=$2 "ZERO PAGE" virtual *=$2 "ZERO PAGE" virtual
.namespace CORE {
yStackOffset: .byte 0
xStackOffset: .byte 0
.label XStack = XSTACK_ADDRESS // 256 bytes
.label YStack = YSTACK_ADDRESS // 256 bytes
}
.namespace SCREEN { .namespace SCREEN {
TempVideoPointer: .word 0 TempVideoPointer: .word 0
TempStringPointer: .word 0 TempStringPointer: .word 0
CursorCol: .byte 0 CursorCol: .byte 0
CursorRow: .byte 0 CursorRow: .byte 0
tempY: .byte 0
tempX: .byte 0
PrintPetCharY: .byte 0
PrintPetCharX: .byte 0
ScrollUpTriggered: .byte 0 ScrollUpTriggered: .byte 0
} }
@ -38,15 +46,12 @@
from: .word 0 from: .word 0
dest: .word 0 dest: .word 0
size: .word 0 size: .word 0
tmpX: .byte 0
tmpY: .byte 0
} }
.namespace MODULE { .namespace MODULE {
versionPtr: .word 0 versionPtr: .word 0
} }
.namespace SHELL { .namespace SHELL {
pos: .byte 0 pos: .byte 0
MODE: .byte 0 MODE: .byte 0
@ -58,6 +63,8 @@
XAML: .byte 0 XAML: .byte 0
XAMH: .byte 0 XAMH: .byte 0
.label buffer = $3000 // 256 bytes .label buffer = SHELL_BUGGER_ADDR // 256 bytes
} }

131
core/pseudo.asm Normal file
View File

@ -0,0 +1,131 @@
#importonce
#import "../core/mem_map.asm"
#import "../libs/module.asm"
// ========================================================
// ////// PSEUDO COMMANDS /////////////////////////////////
// ========================================================
.pseudocommand phy {
jsr Pseudo._phy
}
.pseudocommand ply {
jsr Pseudo._ply
}
.pseudocommand phx {
jsr Pseudo._phx
}
.pseudocommand plx {
jsr Pseudo._plx
}
.pseudocommand phr {
pha
phx
phy
}
.pseudocommand plr {
plx
ply
pla
}
.filenamespace Pseudo
// ========================================================
// ////// METHODS /////////////////////////////////////////
// ========================================================
* = * "Pseudo Commands"
// --------------------------------------------------------
// init -
// Module Init.
// --------------------------------------------------------
init: {
lda #$00
sta MemMap.CORE.xStackOffset
sta MemMap.CORE.yStackOffset
rts
}
// --------------------------------------------------------
// toDebug -
// Print debug info.
// --------------------------------------------------------
toDebug: {
ModuleToDebug(module_type, module_name, version)
rts
}
_phx: {
pha // Save A
tya // Tansfer Y in A
pha // Save Y as A
inc MemMap.CORE.xStackOffset // Increment Stack offset
ldy MemMap.CORE.xStackOffset // Load new Stack offset in Y
txa // Move X in A
sta MemMap.CORE.XStack, y // Save X (as A) in YStack + offset (y)
pla // Load saved A (was Y)
tay // restore Y from A
pla // restore A
rts
}
_plx: {
pha // Save A
tya // Tansfer X in A
pha // Save X as A
ldx MemMap.CORE.xStackOffset // Load Stack offset
lda MemMap.CORE.XStack, x // Load Y from stack
tax
dec MemMap.CORE.xStackOffset // Dcrement stack offset
pla // Load saved A (was X)
tay // restore X from A
pla
rts
}
_phy: {
pha // Save A
txa // Tansfer X in A
pha // Save X as A
inc MemMap.CORE.yStackOffset // Increment Stack offset
ldx MemMap.CORE.yStackOffset // Load new Stack offset in X
tya // Move Y in A
sta MemMap.CORE.YStack, x // Save Y (as A) in XStack + offset (x)
pla // Load saved A (was X)
tax // restore X from A
pla // restore A
rts
}
_ply: {
pha // Save A
txa // Tansfer X in A
pha // Save X as A
ldx MemMap.CORE.yStackOffset // Load Stack offset
ldy MemMap.CORE.YStack, x // Load Y from stack
dec MemMap.CORE.yStackOffset // Dcrement stack offset
pla // Load saved A (was X)
tax // restore X from A
pla // restore A
rts
}
// ========================================================
// ////// DATA ////////////////////////////////////////////
// ========================================================
* = * "Pseudo Data"
module_type: .byte Module.TYPES.CORE
version: .byte 1, 0, 0
.encoding "screencode_mixed"
module_name:
.text "pseudo"
.byte 0

View File

@ -2,6 +2,7 @@
#import "../libs/math.asm" #import "../libs/math.asm"
#import "../libs/memory.asm" #import "../libs/memory.asm"
#import "../libs/module.asm" #import "../libs/module.asm"
#import "../core/pseudo.asm"
// ======================================================== // ========================================================
@ -184,7 +185,7 @@ scrollUp: {
// -------------------------------------------------------- // --------------------------------------------------------
sendChar: { sendChar: {
sei sei
stx MemMap.SCREEN.tempX phx
cmp #CR cmp #CR
bne.r !+ bne.r !+
jsr screenNewLine jsr screenNewLine
@ -205,7 +206,7 @@ sendChar: {
stx MemMap.SCREEN.TempVideoPointer+1 stx MemMap.SCREEN.TempVideoPointer+1
// Temp Save Y // Temp Save Y
sty MemMap.SCREEN.tempY phy
// CursorRow * 40 // CursorRow * 40
ldy MemMap.SCREEN.CursorRow ldy MemMap.SCREEN.CursorRow
@ -256,12 +257,12 @@ sendChar: {
!: !:
// insert into screen // insert into screen
sta (MemMap.SCREEN.TempVideoPointer), y sta (MemMap.SCREEN.TempVideoPointer), y
ldy MemMap.SCREEN.tempY ply
iny iny
inc MemMap.SCREEN.CursorCol inc MemMap.SCREEN.CursorCol
exit: exit:
ldx MemMap.SCREEN.tempX plx
cli cli
rts rts
} }

View File

@ -2,6 +2,7 @@
#importonce #importonce
#import "../libs/module.asm" #import "../libs/module.asm"
#import "../libs/module.asm" #import "../libs/module.asm"
#import "../core/pseudo.asm"
// ======================================================== // ========================================================
@ -123,8 +124,7 @@ toDebug: {
// copy // copy
// -------------------------------------------------------- // --------------------------------------------------------
clone: { clone: {
stx MemMap.MEMORY.tmpX phr
sty MemMap.MEMORY.tmpY
sei sei
ldy #0 ldy #0
ldx MemMap.MEMORY.size ldx MemMap.MEMORY.size
@ -146,8 +146,7 @@ clone: {
bne md3 bne md3
cli cli
md4: md4:
ldx MemMap.MEMORY.tmpX plr
ldy MemMap.MEMORY.tmpY
rts rts
} }
@ -163,8 +162,7 @@ clone: {
// A = The byte to fill memory with // A = The byte to fill memory with
// -------------------------------------------------------- // --------------------------------------------------------
fill: { fill: {
stx MemMap.MEMORY.tmpX phr
sty MemMap.MEMORY.tmpY
sei sei
ldy #0 ldy #0
ldx MemMap.MEMORY.size ldx MemMap.MEMORY.size
@ -185,8 +183,7 @@ fill: {
bne md3 bne md3
cli cli
md4: md4:
ldx MemMap.MEMORY.tmpX plr
ldy MemMap.MEMORY.tmpY
rts rts
} }

View File

@ -58,14 +58,10 @@ toDebug: {
// A = PET ASCII char to print // A = PET ASCII char to print
// -------------------------------------------------------- // --------------------------------------------------------
printPetChar: { printPetChar: {
pha phr
stx MemMap.SCREEN.PrintPetCharX
sty MemMap.SCREEN.PrintPetCharY
jsr Print.petCharToScreenChar jsr Print.petCharToScreenChar
jsr Screen.sendChar jsr Screen.sendChar
ldy MemMap.SCREEN.PrintPetCharY plr
ldx MemMap.SCREEN.PrintPetCharX
pla
rts rts
} }

View File

@ -5,7 +5,6 @@
* = $8000 "Main" * = $8000 "Main"
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
.const MAIN_COLOR = $03 .const MAIN_COLOR = $03
.const BORDER_COLOR = $05 .const BORDER_COLOR = $05

View File

@ -2,6 +2,7 @@
#import "../libs/print.asm" #import "../libs/print.asm"
#import "../libs/module.asm" #import "../libs/module.asm"
#import "../core/init.asm" #import "../core/init.asm"
#import "../core/pseudo.asm"
.filenamespace WozShell .filenamespace WozShell
@ -11,8 +12,8 @@
// ////// CONSTANTS /////////////////////////////////////// // ////// CONSTANTS ///////////////////////////////////////
// ======================================================== // ========================================================
.const CR = $0d .const CR = $0d
.const R = $52 .const R = $52
// ======================================================== // ========================================================
@ -190,7 +191,8 @@ wozExec: {
// We're in XAM mode now // We're in XAM mode now
ldx #2 // Copy 2 bytes ldx #2 // Copy 2 bytes
SETADR: lda MemMap.SHELL.L-1,X // Copy hex data to SETADR:
lda MemMap.SHELL.L-1,X // Copy hex data to
sta MemMap.SHELL.STL-1,X // 'store index' sta MemMap.SHELL.STL-1,X // 'store index'
sta MemMap.SHELL.XAML-1,X // and to 'XAM index' sta MemMap.SHELL.XAML-1,X // and to 'XAM index'
dex // Next of 2 bytes dex // Next of 2 bytes