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

View File

@ -1,17 +1,25 @@
.filenamespace MemMap
#importonce
.const SHELL_BUGGER_ADDR = $3000
.const XSTACK_ADDRESS = $3100
.const YSTACK_ADDRESS = $3200
*=$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 {
TempVideoPointer: .word 0
TempStringPointer: .word 0
CursorCol: .byte 0
CursorRow: .byte 0
tempY: .byte 0
tempX: .byte 0
PrintPetCharY: .byte 0
PrintPetCharX: .byte 0
ScrollUpTriggered: .byte 0
}
@ -38,15 +46,12 @@
from: .word 0
dest: .word 0
size: .word 0
tmpX: .byte 0
tmpY: .byte 0
}
.namespace MODULE {
versionPtr: .word 0
versionPtr: .word 0
}
.namespace SHELL {
pos: .byte 0
MODE: .byte 0
@ -58,6 +63,8 @@
XAML: .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/memory.asm"
#import "../libs/module.asm"
#import "../core/pseudo.asm"
// ========================================================
@ -184,7 +185,7 @@ scrollUp: {
// --------------------------------------------------------
sendChar: {
sei
stx MemMap.SCREEN.tempX
phx
cmp #CR
bne.r !+
jsr screenNewLine
@ -205,7 +206,7 @@ sendChar: {
stx MemMap.SCREEN.TempVideoPointer+1
// Temp Save Y
sty MemMap.SCREEN.tempY
phy
// CursorRow * 40
ldy MemMap.SCREEN.CursorRow
@ -256,12 +257,12 @@ sendChar: {
!:
// insert into screen
sta (MemMap.SCREEN.TempVideoPointer), y
ldy MemMap.SCREEN.tempY
ply
iny
inc MemMap.SCREEN.CursorCol
exit:
ldx MemMap.SCREEN.tempX
plx
cli
rts
}

View File

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

View File

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

View File

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

View File

@ -2,6 +2,7 @@
#import "../libs/print.asm"
#import "../libs/module.asm"
#import "../core/init.asm"
#import "../core/pseudo.asm"
.filenamespace WozShell
@ -11,8 +12,8 @@
// ////// CONSTANTS ///////////////////////////////////////
// ========================================================
.const CR = $0d
.const R = $52
.const CR = $0d
.const R = $52
// ========================================================
@ -190,7 +191,8 @@ wozExec: {
// We're in XAM mode now
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.XAML-1,X // and to 'XAM index'
dex // Next of 2 bytes