diff --git a/core/init.asm b/core/init.asm index f87d2f3..1b656eb 100644 --- a/core/init.asm +++ b/core/init.asm @@ -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 diff --git a/core/mem_map.asm b/core/mem_map.asm index 23679ba..c5c0f03 100644 --- a/core/mem_map.asm +++ b/core/mem_map.asm @@ -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 } + + diff --git a/core/pseudo.asm b/core/pseudo.asm new file mode 100644 index 0000000..a35a829 --- /dev/null +++ b/core/pseudo.asm @@ -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 diff --git a/core/screen.asm b/core/screen.asm index 530f2b3..89804e8 100644 --- a/core/screen.asm +++ b/core/screen.asm @@ -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 } diff --git a/libs/memory.asm b/libs/memory.asm index 9818bc5..b4b1082 100644 --- a/libs/memory.asm +++ b/libs/memory.asm @@ -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 } diff --git a/libs/print.asm b/libs/print.asm index 2acd704..416ff2d 100644 --- a/libs/print.asm +++ b/libs/print.asm @@ -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 } diff --git a/main.asm b/main.asm index eaa4c94..a3bd757 100644 --- a/main.asm +++ b/main.asm @@ -5,7 +5,6 @@ * = $8000 "Main" - //------------------------------------------------------------------------------------ .const MAIN_COLOR = $03 .const BORDER_COLOR = $05 diff --git a/progs/woz_shell.asm b/progs/woz_shell.asm index 63f6356..4783a94 100644 --- a/progs/woz_shell.asm +++ b/progs/woz_shell.asm @@ -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