From ae4511bac59e91d34c09b558e4c7c8cbdc345e60 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Wed, 22 Sep 2021 20:42:58 -0400 Subject: [PATCH] Load bitmap font from file into main memory --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 3 +++ font.dat | Bin 0 -> 2048 bytes mainmem.ldr.s | 10 ++++++++++ mainmem.svc.s | 5 +++++ 5 files changed, 18 insertions(+) create mode 100644 font.dat diff --git a/applecorn.po b/applecorn.po index c3b330566ff5d22855d684c92ac7c21b56cb7b56..3bd41be58dd53fb5c05225fd6a23a9463cef106e 100644 GIT binary patch delta 6402 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 delta 4220 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 diff --git a/applecorn.s b/applecorn.s index b4d35a8..ad9deea 100644 --- a/applecorn.s +++ b/applecorn.s @@ -58,6 +58,9 @@ COPYBUF EQU $9200 ; File copy needs separate buffer * Location of FDraw library in main memory FDRAWADDR EQU $9400 +* Location of bitmap font in main memory +FONTADDR EQU $A900 + * Address in aux memory where ROM will be loaded AUXADDR EQU $8000 diff --git a/font.dat b/font.dat new file mode 100644 index 0000000000000000000000000000000000000000..9337cb7b9f2caf83226e08255540f312065110f3 GIT binary patch literal 2048 zcmd^8J&PMx6n%?9l@M|F5|-^9Qm9&XVNjajUyvU#qx%a-noSd}o2TBJf zGRCN$F}zh^TCJ7|)WIRFhX*QZwGLXXsCl>OKQZvb>+=Fl3Dl!5PZW4357`H;_rUF5KO@9A&KDib5Ufvhw zsNCMhx7$)0S(K0$i@YrJ#S8wA8^?G&e)Tf0wv$Hwc6pM!_4hv%`6Ms4r{jw2xLjYy*XvRiKi60DTFCS@A{aVB3D9k%1k5xqYY<^}w%+qB-o<@ff&P7$D=35rzTm zhumXYyRPXOn~H1c2?Ib;6^52*71)b>I5 z0CUC~M(U`Ixwnt7SG9Ds#=>+E_r+&;DE0Z*yi{h-&MKRU%WPt;m8rG7C9_pU`*H^B zY$-`qEvqVN-WC047JhhrUgjv7JefmgxgZB?WCbXYM2_$7-8()$7W*tokcfOr=IbG# z*0YhD(2lmlc#u`sc`6xs&7rTa z&R;b<`EkdnvJ9TY@m^~cE-P*b9#bbTEpY9R;FaZ{+Bx0t|NH#W95xG*r9(RuEUe#u=vYhiGliLU zbSj}fazno=LUTH;<1uh27$D=3k)|2!Gww01-Y#|zCjdBr_dAA(`FXJ%4nU2U($Dh% zor?!to&e5|Y2?8)a>o7-&#ChO)b`:FNTFILE + STA OPENPL+2 + LDA #>FONTADDR ; Address in main + LDX #MOSSHIM @@ -69,6 +78,7 @@ START JSR CROUT >>> XF2AUX,AUXMOS1 :FDFILE STR "FDRAW.FAST" ; Filename for FDraw lib +:FNTFILE STR "FONT.DAT" ; Filename for bitmap font * Load image from file into memory * On entry: OPENPL set up to point to file to load diff --git a/mainmem.svc.s b/mainmem.svc.s index 581fc30..07f6fa9 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -1129,6 +1129,11 @@ GFXINIT JSR FDRAWADDR+0 ; Initialize FDRAW library JSR FDRAWADDR+22 ; FDRAW: clear HGR screen RTS +* Draw character on graphics screen (byte aligned) +* On entry: Character in A +DRAWCHAR + RTS + FGCOLOR DB $00 ; Foreground colour BGCOLOR DB $00 ; Background colour LINETYPE DB $00 ; 0 normal, 1 XOR