From 8db85143a003bd70272a281e19f4988fe687fa4e Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 13 Aug 2017 14:54:18 -0700 Subject: [PATCH] =?UTF-8?q?Ported=20Dagen=E2=80=99s=20font=20engine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GSCats.xcodeproj/project.pbxproj | 2 + font.s | 687 +++++++++++++++++++++++++++++++ gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 10 +- macros.s | 9 + 5 files changed, 707 insertions(+), 1 deletion(-) create mode 100644 font.s diff --git a/GSCats.xcodeproj/project.pbxproj b/GSCats.xcodeproj/project.pbxproj index c0b6f56..ce483f2 100644 --- a/GSCats.xcodeproj/project.pbxproj +++ b/GSCats.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXFileReference section */ 700C39C51F2E5CA800C24F9C /* tables.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = tables.s; sourceTree = ""; }; + 700FFAFB1F40F3BF00A442DE /* font.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = font.s; sourceTree = ""; }; 7059502B1F37A0BE00BBE90F /* GenerateVRAMTable.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = GenerateVRAMTable.py; sourceTree = ""; }; 706DF1641F2D39F700AA6680 /* loader.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = loader.s; sourceTree = ""; }; 706DF1651F2D4A8100AA6680 /* terrain.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = terrain.s; sourceTree = ""; }; @@ -28,6 +29,7 @@ 70E9D8601F2BD95400555C19 /* graphics.s */, 70E9D8621F2BD95400555C19 /* macros.s */, 706DF1641F2D39F700AA6680 /* loader.s */, + 700FFAFB1F40F3BF00A442DE /* font.s */, 706DF1651F2D4A8100AA6680 /* terrain.s */, 7088096C1F2EA4B200D4C950 /* spanRender.s */, 700C39C51F2E5CA800C24F9C /* tables.s */, diff --git a/font.s b/font.s new file mode 100644 index 0000000..33f034d --- /dev/null +++ b/font.s @@ -0,0 +1,687 @@ +;**************************************** +;* FONT ENGINE (v3?) * +;* * +;* Dagen Brock * +;* 2013-07-20 * +;* Converted to ca65 by Quinn Dunki * +;* 2017-08-13 * +;**************************************** +;* A= ptr to string preceded by length * +;* X= screen location * +;* Preserves all registers * +;* Trashes zero page locations 6,7 * +;**************************************** +; each char: +; draw char at loc +; update loc +; see if length hit - no? back to draw char + +F_Length: .word 0 ;length of string (only one byte currently used) +F_CharIdx: .word 0 ;index of current character +F_CurrentPos: .word 0 ;current top left char position +F_StrPtr = $06 ;pointer to string (including length byte) / DP + + +DrawString: + pha + phx + phy + sta F_StrPtr ;store at dp 0 ($00) for indirect loads + stx F_CurrentPos + stz F_CharIdx + lda (F_StrPtr) + and #$00ff ;strip off first char (len is only one byte) + sta F_Length ;get our length byte + +NextChar: lda F_CharIdx + cmp F_Length + bne notDone + ply + plx + pla + rts ;DONE! Return to caller + +notDone: inc F_CharIdx + ldy F_CharIdx + lda (F_StrPtr),y ;get next char! + and #$00FF ;mask high byte + sec + sbc #' ' ;our table starts with space ' ' + asl ;*2 + tay + ldx F_CurrentPos + jsr drawChar + inc F_CurrentPos ;compare to addition time (?) + inc F_CurrentPos + inc F_CurrentPos + inc F_CurrentPos ;update screen pos (2 words=8 pixels) + bra NextChar + +;x = TopLeft screen pos +;y = char table offset +drawChar: lda FontTable,y ;get real address of char data + sec + sbc #FontData ;pivot offset - now a is offset of fontdata + tay ;so we'll index with that + + lda FontData,y + sta $E12000,x + lda FontData+2,y + sta $E12000+2,x + + lda FontData+4,y + sta $E12000+160,x + lda FontData+6,y + sta $E12000+160+2,x + + lda FontData+8,y + sta $E12000+160*2,x + lda FontData+10,y + sta $E12000+160*2+2,x + lda FontData+12,y + sta $E12000+160*3,x + lda FontData+14,y + sta $E12000+160*3+2,x + lda FontData+16,y + sta $E12000+160*4,x + lda FontData+18,y + sta $E12000+160*4+2,x + lda FontData+20,y + sta $E12000+160*5,x + lda FontData+22,y + sta $E12000+160*5+2,x + rts + + + + + +FontTable: + .addr s_Space + .addr s_Exclaim + .addr s_Quote + .addr s_Number + .addr s_Dollar + .addr s_Percent + .addr s_Amper + .addr s_Single + .addr s_OpenParen + .addr s_CloseParen + .addr s_Asterix + .addr s_Plus + .addr s_Comma + .addr s_Minus + .addr s_Period + .addr s_Slash + .addr s_N0 + .addr s_N1 + .addr s_N2 + .addr s_N3 + .addr s_N4 + .addr s_N5 + .addr s_N6 + .addr s_N7 + .addr s_N8 + .addr s_N9 + .addr s_Colon + .addr s_Semi + .addr s_LAngle + .addr s_Equal + .addr s_RAngle + .addr s_Question + .addr s_At + .addr s_A + .addr s_B + .addr s_C + .addr s_D + .addr s_E + .addr s_F + .addr s_G + .addr s_H + .addr s_I + .addr s_J + .addr s_K + .addr s_L + .addr s_M + .addr s_N + .addr s_O + .addr s_P + .addr s_Q + .addr s_R + .addr s_S + .addr s_T + .addr s_U + .addr s_V + .addr s_W + .addr s_X + .addr s_Y + .addr s_Z + .addr s_LBracket + .addr s_BackSlash + .addr s_RBracket + .addr s_Caret + .addr s_UnderLine + +FontData: +s_Space: + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + +s_Exclaim: + qbyte $000FF000 + qbyte $000FF000 + qbyte $000FF000 + qbyte $000FF000 + qbyte $00000000 + qbyte $000FF000 + +s_Quote: + qbyte $0FF00FF0 + qbyte $00F000F0 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + +s_Number: + qbyte $00000000 + qbyte $00F00F00 + qbyte $0FFFFFF0 + qbyte $00F00F00 + qbyte $0FFFFFF0 + qbyte $00F00F00 + +s_Dollar: + qbyte $000F0F00 + qbyte $00FFFFF0 + qbyte $0F0F0F00 + qbyte $00FFFF00 + qbyte $000F0FF0 + qbyte $0FFFFF00 + +s_Percent: + qbyte $0FF000F0 + qbyte $00000F00 + qbyte $0000F000 + qbyte $000F0000 + qbyte $00F00000 + qbyte $0F000FF0 + +s_Amper: + qbyte $000FF000 + qbyte $00F00F00 + qbyte $0F00F000 + qbyte $00F000F0 + qbyte $0F0FFF00 + qbyte $00F0F000 + +s_Single: + qbyte $000FF000 + qbyte $0000F000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + +s_OpenParen: + qbyte $000FF000 + qbyte $00FF0000 + qbyte $0FF00000 + qbyte $0FF00000 + qbyte $00FF0000 + qbyte $000FF000 + +s_CloseParen: + qbyte $000FF000 + qbyte $0000FF00 + qbyte $00000FF0 + qbyte $00000FF0 + qbyte $0000FF00 + qbyte $000FF000 + + +s_Asterix: + qbyte $00000000 + qbyte $00F0F0F0 + qbyte $000FFF00 + qbyte $00FFFFF0 + qbyte $000FFF00 + qbyte $00F0F0F0 + +s_Plus: + qbyte $000F0000 + qbyte $000F0000 + qbyte $0FFFFF00 + qbyte $000F0000 + qbyte $000F0000 + qbyte $00000000 + +s_Comma: + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $0000FF00 + qbyte $0000F000 + +s_Minus: + qbyte $00000000 + qbyte $00000000 + qbyte $0FFFFF00 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + + +s_Period: + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $0000FF00 + qbyte $0000FF00 + +s_Slash: + qbyte $000000F0 + qbyte $00000F00 + qbyte $0000F000 + qbyte $000F0000 + qbyte $00F00000 + qbyte $0F000000 + +s_N0: + qbyte $00FFFF00 + qbyte $0F000FF0 + qbyte $0F00F0F0 + qbyte $0F0F00F0 + qbyte $0FF000F0 + qbyte $00FFFF00 + +s_N1: + qbyte $000F0000 + qbyte $00FF0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $00FFF000 + +s_N2: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $00000F00 + qbyte $000FF000 + qbyte $00F00000 + qbyte $0FFFFFF0 + +s_N3: + qbyte $00FFFF00 + qbyte $000000F0 + qbyte $000FFF00 + qbyte $000000F0 + qbyte $000000F0 + qbyte $00FFFF00 + +s_N4: + qbyte $0000FF00 + qbyte $000F0F00 + qbyte $00F00F00 + qbyte $0FFFFFF0 + qbyte $00000F00 + qbyte $00000F00 + +s_N5: + qbyte $0FFFFFF0 + qbyte $0F000000 + qbyte $0FFFFF00 + qbyte $000000F0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_N6: + qbyte $000FFF00 + qbyte $00F00000 + qbyte $0F000000 + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $00FFFFF0 + +s_N7: + qbyte $0FFFFFF0 + qbyte $000000F0 + qbyte $00000F00 + qbyte $0000F000 + qbyte $000F0000 + qbyte $000F0000 + +s_N8: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_N9: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $00FFFF00 + qbyte $0000F000 + qbyte $000F0000 + qbyte $00F00000 + +s_Colon: + qbyte $000FF000 + qbyte $000FF000 + qbyte $00000000 + qbyte $000FF000 + qbyte $000FF000 + qbyte $00000000 + +s_Semi: + qbyte $00000000 + qbyte $000FF000 + qbyte $000FF000 + qbyte $00000000 + qbyte $000FF000 + qbyte $000F0000 + +s_LAngle: + qbyte $0000F000 + qbyte $000F0000 + qbyte $00F00000 + qbyte $000F0000 + qbyte $0000F000 + qbyte $00000000 + +s_Equal: + qbyte $00000000 + qbyte $00000000 + qbyte $0FFFFF00 + qbyte $00000000 + qbyte $0FFFFF00 + qbyte $00000000 + +s_RAngle: + qbyte $0000F000 + qbyte $00000F00 + qbyte $000000F0 + qbyte $00000F00 + qbyte $0000F000 + qbyte $00000000 + +s_Question: + qbyte $00FFF000 + qbyte $0F000F00 + qbyte $00000F00 + qbyte $000FF000 + qbyte $00000000 + qbyte $000FF000 + +s_At: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $0F00F0F0 + qbyte $0FFFF0F0 + qbyte $000000F0 + qbyte $0FFFFF00 + +s_A: + qbyte $000FF000 + qbyte $00F00F00 + qbyte $0F0000F0 + qbyte $0FFFFFF0 + qbyte $0F0000F0 + qbyte $0F0000F0 + +s_B: + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0FFFFF00 + +s_C: + qbyte $00FFFFF0 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $00FFFFF0 + +s_D: + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0FFFFF00 + +s_E: + qbyte $0FFFFFF0 + qbyte $0F000000 + qbyte $0FFFF000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0FFFFFF0 + +s_F: + qbyte $0FFFFFF0 + qbyte $0F000000 + qbyte $0FFFF000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + +s_G: + qbyte $00FFFFF0 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F00FFF0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_H: + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0FFFFFF0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + +s_I: + qbyte $0FFFFF00 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $0FFFFF00 + +s_J: + qbyte $000000F0 + qbyte $000000F0 + qbyte $000000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_K: + qbyte $0F000F00 + qbyte $0F00F000 + qbyte $0FFF0000 + qbyte $0F00F000 + qbyte $0F000F00 + qbyte $0F000F00 + +s_L: + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0FFFFFF0 + +s_M: + qbyte $0F0000F0 + qbyte $0FF00FF0 + qbyte $0F0FF0F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + +s_N: + qbyte $0F0000F0 + qbyte $0FF000F0 + qbyte $0F0F00F0 + qbyte $0F00F0F0 + qbyte $0F000FF0 + qbyte $0F0000F0 + +s_O: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_P: + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $0FFFFF00 + qbyte $0F000000 + qbyte $0F000000 + qbyte $0F000000 + +s_Q: + qbyte $00FFFF00 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F00F0F0 + qbyte $0F000FF0 + qbyte $00FFFFF0 + +s_R: + qbyte $0FFFFF00 + qbyte $0F0000F0 + qbyte $0FFFFF00 + qbyte $0F000F00 + qbyte $0F0000F0 + qbyte $0F0000F0 + +s_S: + qbyte $00FFFFF0 + qbyte $0F000000 + qbyte $00FFFF00 + qbyte $000000F0 + qbyte $000000F0 + qbyte $0FFFFF00 + +s_T: + qbyte $0FFFFF00 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + +s_U: + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $00FFFF00 + +s_V: + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $00F00F00 + qbyte $000FF000 + +s_W: + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0000F0 + qbyte $0F0FF0F0 + qbyte $0FF00FF0 + qbyte $0F0000F0 + +s_X: + qbyte $0F0000F0 + qbyte $00F00F00 + qbyte $000FF000 + qbyte $000FF000 + qbyte $00F00F00 + qbyte $0F0000F0 + +s_Y: + qbyte $F00000F0 + qbyte $0F000F00 + qbyte $00F0F000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + +s_Z: + qbyte $0FFFFFF0 + qbyte $00000F00 + qbyte $0000F000 + qbyte $000F0000 + qbyte $00F00000 + qbyte $0FFFFFF0 + +s_LBracket: + qbyte $000FFF00 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000F0000 + qbyte $000FFF00 + +s_BackSlash: + qbyte $0F000000 + qbyte $00F00000 + qbyte $000F0000 + qbyte $0000F000 + qbyte $00000F00 + qbyte $000000F0 + +s_RBracket: + qbyte $00FFF000 + qbyte $0000F000 + qbyte $0000F000 + qbyte $0000F000 + qbyte $0000F000 + qbyte $00FFF000 + +s_Caret: + qbyte $0000F000 + qbyte $000F0F00 + qbyte $00F000F0 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + +s_UnderLine: + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $FFFFFFF0 + +s_Template: + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + qbyte $00000000 + diff --git a/gscats.2mg b/gscats.2mg index dc7fcd89ff783ee39ed75242fb5db11e4a9fd448..d1459312a3415f42a525c957fafb60e1f2350108 100644 GIT binary patch delta 4466 zcmeHJeQZYRa7YV{yLmK3Q)g*tfeDr%bxXz{Ytw2a*@qIQCZ>we=sLZfbKiZo zn`GMl*+1K!{oe1KbIY{{*GB;RKB5pGb z5-z&IApVsTznLrQaz!~uyv_CSj#$9ZeM_I%&=)WaiGdt(OdqQ^nC-E(hQ#kxO5YZh z@`He0ypscd5F1sLzIsFOkUn-xze7=6*?qV4!9(Fsk9vIp!+0A>EVx|Y(Bb&o4L@W^ z+}*fQQ==KAZ>^z&knj_|1?v@oz@;c_TDAv+t>Twjp9(&9ct*TZKYF)so{N&xAY9oG z$^vKbp9bNExT!A@KGVDRk$DaWV+)*WjwQJK-5virmWwK{<`0CMzPB#x#luHl8fnfP z%gEeF!WS<;8GfrbJMY*;Y(|VNBM+ZDc07c&64ElYr&o9C0r%=6cU9+8NZ-d?Y>|8C zV{RhrrBC*E%rA03UgU;xq+w1Z+|W-RaN_1Q^AEV>x92zU{xuDAPJSrv^@SbpAFqqvwbECQ4++}{*+;1K>kDI5>56u>f z&(dsp+H$~h+;Y(pw@g~*EEzen+gU6m2uZ)Ob)X9gc)&+?+d>I}2#Nwq3W)$a0&Iec z5CQ>;f|1Av9O*#$zy$GVM_lr62ZLH4r#m?#&S`F5>$W2g>@q< z)`l^tVU21bsx3sP3@low86yT!ZWf3hl!Q)_<)y_@JFWzzqUlnA1Sub6MoyK7*&#nx zgk`Fb>Nw~)1KNF%@k-aJjK=g>rX#S6t^&v!Qh%C^28Lh=3x^9=kPbj4T2e$-DO~~u zHxSGMi^ehRnyS;8F&haXa93*bt3w`3U|% z4DKV26CBsoc(7L&m+Q{z{tO=N5$ zV^lhy&tg8LF?$BSN}_UIukNT`^yY>$PPle;=U!_M+|-{bPn1TdNMCpE?5t`iNVsC% zxdt*N>t<)i#zqIo#BY%#+CqBXr6VmpeJC?SWqBwRc_!cbzB+ZLw~*2CbjB zK4X2>deHhE>kq8`)*K0(;I)-Z*u47owa6Q8Y44XXHK-I}}jSM$3+{AD* z!$%lC%5V$ACWg%nw=&$ua66_MzO zs^)Ob&6?cWuhd?xUFH9Rf5`u-|37s0LQ4+Y5;b`^l80}pL+ZC6>9V3}ITQNRW$Qed rOPA;W=MGQ(|Hiq?rkiA>dFb#~*`GBMzxVxBBW*)nTmO3>1L8jb019jl delta 2584 zcmeH{eM}o=9LJv)xZPcQeWCB|wY`?N7LXMJg8}7bZ!$$?1|04WgBerUH1TEgg=k7L zD%GU}Je-qZQeYA;S*_BT#YHk;VZpf=FmaA<0DgaIaoEJj2S~wM~!X%hLz-|*C4`Ni^ z%ffR{v5g&eS0g#^2-wHN#6%Z7PdYf9aAO<*%xmPJ)ym`%j6uwdiWsMe`Gjm2YyCFj z*)cp)?6nai%(oth=XD@*O|OS@nzT139q=NNaA|3xpn% zWu6HXjfcH+BnP^n2(-W^L=uiJC?=UQ?*)>J_8WZDY_(^*bB^Ta_(NoT)PI3AG&bFB z1Y6}%u~lyr2CIc<1?&coQ{$QO&ollNp)BWl({UH6zGlGRTM2h)_o9s*=+?VdMDh36 zR1?}!!f}<0@ZTP62HLksvi0(AH}nt8|%QCS&_#3v*-bzqQ38eEtR3G&rb&8s!A`~vMNXjISNnVh2N&J$tl3yj1 zbglGJ=}Xch(h2E;R3=+5+bKIJJ0ZIwQ^_~U_sTzzeH2yq=^F=7egdc;!1GDIgIGu!8kwX=N{ zh*i98IaU>GEyt=6Hz00A+=RFpaSP)8h+E?^HOc%_gLyS6v3HSIY`8ZWjk4qJWVE0L z>Xc>e8(fo^5@zv)lnoIH`P@5XLUs>{T;(DFrVL*gzA}UiKN=Pd*A2WSlj*p+O-pn`uK_jV-z-MF_S yheYsg2=)Y$w(M_M>TFmNz!Jhrf|U#_1r`Qt4J;fM0gF7|uq3*AAm|IIu)hJE5Z_J! diff --git a/gscats.s b/gscats.s index cf8a7f4..096e426 100644 --- a/gscats.s +++ b/gscats.s @@ -29,6 +29,10 @@ mainBank2: ldx #$2222 jsr colorFill + ldx #2560 + lda #string + jsr DrawString + jsr generateTerrain jsr compileTerrain jsr clipTerrain @@ -148,15 +152,19 @@ kbdScanSpace: basePalette: - .word $0800,$0080,$0000,$000F,$0FFF,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 + .word $0000,$0080,$0000,$000F,$0FFF,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0FFF mapScrollPos: ; 4-pixel columns distance from right terrain edge .word 0 quitRequested: .word $0000 mapScrollRequested: .word $FFFF +string: + pstring "HELLO WORLD" + .include "graphics.s" +.include "font.s" .include "terrain.s" .include "tables.s" endMainBank2: diff --git a/macros.s b/macros.s index 2b12de4..7b3efdd 100644 --- a/macros.s +++ b/macros.s @@ -118,6 +118,15 @@ .endmacro +.macro pstring Arg + .byte .strlen(Arg), Arg +.endmacro + + +.macro qbyte Arg + .dbyt Arg>>16,Arg&$0000ffff +.endmacro + ;;;;;;;;;; ; Stack Macros