From 4796b6539089e9ec8c15cf7b00aa0f82ab181851 Mon Sep 17 00:00:00 2001 From: Seth Morabito Date: Fri, 15 Aug 2014 18:15:50 -0700 Subject: [PATCH] New ROMs. Better backspace handling. --- samples/ehbasic_crtc/min_mon.asm | 73 ++++++++++++++---- .../com/loomcom/symon/ui/VideoWindow.java | 2 +- src/main/resources/ascii.rom | Bin 0 -> 2048 bytes src/main/resources/mod.rom | Bin 0 -> 2048 bytes 4 files changed, 58 insertions(+), 17 deletions(-) create mode 100644 src/main/resources/ascii.rom create mode 100644 src/main/resources/mod.rom diff --git a/samples/ehbasic_crtc/min_mon.asm b/samples/ehbasic_crtc/min_mon.asm index 17c2442..4e84c2e 100644 --- a/samples/ehbasic_crtc/min_mon.asm +++ b/samples/ehbasic_crtc/min_mon.asm @@ -44,13 +44,7 @@ RES_vec TXS ; set the stack ;; Initialize the CRTC - LDA #$70 - STA CADDR_H - LDA #$00 ; Set cursor start to $7000 - STA CADDR_L - STA C_ROW - STA C_COL - JSR SET_CURSOR + JSR CLRVID ;; TODO: Initialize params on CRTC ; Initialize the ACIA @@ -115,7 +109,6 @@ ACIAout: ;;; 3. Store new cursor position in CRTC. CRTCout: - STA COUTC ; Store the character going out JSR ACIAout ; Also echo to terminal for debugging. ;; In parallel, we're maintaining two states: @@ -135,14 +128,29 @@ CRTCout: ;; Carriage Return CMP #$0d BEQ DO_CR - ;; Any other character + ;; Any other character... + CMP #'a' + STA COUTC ; Store the character going out JSR COUT1 JSR INC_CADDR INC C_COL JSR SET_CURSOR RTS -DO_BS: RTS + ;; Handle a back-space character. +DO_BS: LDA C_COL + BNE @l1 ; Skip next bit + LDA #$27 + STA C_COL + BNE @l2 +@l1: DEC C_COL +@l2: JSR DEC_CADDR ; Back up + JSR SET_CURSOR + +@l3: LDA #$20 + STA COUTC ; Echo a space ($20) + JSR COUT1 + RTS DO_LF: RTS ; Just swallow LF. CR emulates it. @@ -175,7 +183,6 @@ DO_CR: SEC JSR SET_CURSOR ;; Move the cursor RTS - SET_CURSOR: LDA #14 @@ -187,7 +194,41 @@ SET_CURSOR: LDA CADDR_L STA $9001 RTS - + + ;; Clear the video window and put the cursor at the home + ;; position +CLRVID: + LDA #$70 + STA CADDR_H + LDA #$00 ; Set cursor start to $7000 + STA CADDR_L + STA C_ROW + STA C_COL + JSR SET_CURSOR + ;; Fill with space character + STY TMPY + LDA #$20 ; Space + LDY #$00 +@l1: STA $7000,Y + INY + BNE @l1 +@l2: STA $7100,Y + INY + BNE @l2 +@l3: STA $7200,Y + INY + BNE @l3 +@l4: STA $7300,Y + INY + BNE @l4 +@l5: STA $7400,Y + INY + BNE @l5 + + LDY TMPY + + RTS + ;; Handle a scroll request DO_SCROLL: ;; Copy $7028 through $70FF to $7000 through $70D7 @@ -224,13 +265,13 @@ DO_SCROLL: STA CADDR_H LDY TMPY ; Restore Y RTS - + ;; Decrement the cursor address INC_CADDR: INC CADDR_L BNE @l1 ; Did we increment to 0? INC CADDR_H ; Yes, also increment high -@l1 RTS +@l1 RTS ;; Increment the cursor address DEC_CADDR: @@ -240,14 +281,14 @@ DEC_CADDR: @l1 DEC CADDR_L RTS -COUT1: +COUT1: STY TMPY LDY #$00 LDA COUTC STA (CADDR_L),Y LDY TMPY RTS - + ; ; byte in from ACIA. This subroutine will also force ; all lowercase letters to be uppercase. diff --git a/src/main/java/com/loomcom/symon/ui/VideoWindow.java b/src/main/java/com/loomcom/symon/ui/VideoWindow.java index 4090759..f0f1bf5 100644 --- a/src/main/java/com/loomcom/symon/ui/VideoWindow.java +++ b/src/main/java/com/loomcom/symon/ui/VideoWindow.java @@ -138,7 +138,7 @@ public class VideoWindow extends JFrame implements DeviceChangeListener { this.scheduler = Executors.newSingleThreadScheduledExecutor(); this.crtc = crtc; - this.charRom = loadCharRom("/cga8.rom"); + this.charRom = loadCharRom("/ascii.rom"); this.scaleX = scaleX; this.scaleY = scaleY; this.shouldScale = (scaleX > 1 || scaleY > 1); diff --git a/src/main/resources/ascii.rom b/src/main/resources/ascii.rom new file mode 100644 index 0000000000000000000000000000000000000000..f5d860cad4fe7c227af6ba66620d087b1967861f GIT binary patch literal 2048 zcmeHH&59F25Uw2?ZDhzci-$pmWf&S+_7n(62u*04VTeIw5%dspSb_wPIY|z~=xglF zvrpjzh$#o?X95r}96#~rT9>%_>EHmg;{>1i5N$>Y6Yo=0Gz6;RzA!deO;D>UasVP##Hj>n4RE%%O z#VDp{0lOl9m>0X4hkGyU<-1qar4%;wAq45_+SPRjz4yK@WpC@cwtM9Fdyl#X>1lr* zV8=c2z7o}IUCKxSs53N+-J%JCC_pb^yIL`R*t}V`kjNK;Ed*gmJcnQat4#%OXQammoPTWwr#FE@OOt@1IFm@S7wr@BQ!p-uJ)v zC$^n}bhFxOnN?-0re4fIcU!F%e5yD=g;Fr>W_Sr?L7IO*H*|q)p4OZ!RwE+C@XxatpF18?yCfrFzlU`ep-t)eCn(P=%k%mu*+9nL}L5-?CgyBiG*1 zaEcR&&}tlu*aWtZpn7$`8tgB~@MoY!~u3@`Y_x#~_2u(#9tr z6mJuH=3>CqER`yyQWJ69i;_t@R;g67c2M8mv7sxqwyb~XU>$qZJ`?J7-J~TAfKI2j zzP(;^D7{@SIS)5Ch2Lp>v{8peJqM#A9HxmJOFTiUe|VTA?WYQ}-A1PVW;{M3;s>-zuRCbF@fim*SpQ!CY;7tKl@Z5P|~K z%jMSUPJK=Ju3e%0iqXWx;jh)}Yq^TbM}3_NC~uNRdDQ^huC3qytfrz8C;I$-02chn z7k)X9_>Co}5CJhNA_dBOeGvTAgm0lig_-?iXohQ$oI44nP{@ca+tpTDnOoWQYOgn8Pqskudb|gd9JAHvX%RrOwxJ^hcKm$H#-C-YF+> zr1D^+C{B13fgl=j{B(RWekxS)i7+Z)1=hU1aJskFj!#3hU5Ddq>7Y>KRa1Zr^y#TsW8_4=k zKGv~E?HfaV9FO@j0ie_G9q%9ad-#}p&W|Pvqz=#*8;0l~?BU@f@PPzW43#2*y;(9DN&iNIK68M{Bs1=dt^|F4F+>;U z*kzerinFATxdy>O$L|~<1O=!!o1J$3?y2&u;53&@XL9`?;M~3Dc?+d=?C)(8qnrQ%3Vz1BVFl$McJ8Fmj