From 38f3b5c981386e3b3dbd53b3c4e28f2c964bb6bf Mon Sep 17 00:00:00 2001 From: wayne Date: Sun, 11 Nov 2012 22:05:51 +0000 Subject: [PATCH] Preliminary version of Color VDU driver --- branches/wbw/RomDsk/cfg_n8vem_cvdu/1200.COM | Bin 0 -> 128 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/38400.COM | Bin 0 -> 128 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/9600.COM | Bin 0 -> 128 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/FLASHZ.COM | Bin 0 -> 800 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/LDTIM.COM | Bin 0 -> 3584 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/RTC.COM | Bin 0 -> 2048 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/T5.COM | Bin 0 -> 96 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/XM.COM | Bin 0 -> 5375 bytes branches/wbw/RomDsk/cfg_n8vem_cvdu/XM5.COM | Bin 0 -> 3072 bytes branches/wbw/Source/bnk1.asm | 58 +- branches/wbw/Source/config_n8_2312.asm | 2 +- branches/wbw/Source/config_n8_2511.asm | 2 +- branches/wbw/Source/config_n8vem.asm | 2 +- branches/wbw/Source/config_n8vem_cvdu.asm | 92 ++ branches/wbw/Source/config_n8vem_dide.asm | 2 +- branches/wbw/Source/config_n8vem_diskio.asm | 2 +- branches/wbw/Source/config_n8vem_diskio3.asm | 2 +- branches/wbw/Source/config_n8vem_ppide.asm | 2 +- branches/wbw/Source/config_n8vem_ppisd.asm | 2 +- branches/wbw/Source/config_n8vem_propio.asm | 2 +- branches/wbw/Source/config_n8vem_vdu.asm | 2 +- branches/wbw/Source/config_simh.asm | 2 +- branches/wbw/Source/config_zeta.asm | 2 +- branches/wbw/Source/config_zeta_ppp.asm | 2 +- branches/wbw/Source/cvdu.asm | 662 +++++++++++ branches/wbw/Source/cvdu_font.asm | 1025 +++++++++++++++++ branches/wbw/Source/kbd.asm | 14 +- branches/wbw/Source/std.asm | 31 +- branches/wbw/Source/tty.asm | 2 +- branches/wbw/Source/vdu.asm | 4 +- 30 files changed, 1875 insertions(+), 39 deletions(-) create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/1200.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/38400.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/9600.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/FLASHZ.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/LDTIM.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/RTC.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/T5.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/XM.COM create mode 100644 branches/wbw/RomDsk/cfg_n8vem_cvdu/XM5.COM create mode 100644 branches/wbw/Source/config_n8vem_cvdu.asm create mode 100644 branches/wbw/Source/cvdu.asm create mode 100644 branches/wbw/Source/cvdu_font.asm diff --git a/branches/wbw/RomDsk/cfg_n8vem_cvdu/1200.COM b/branches/wbw/RomDsk/cfg_n8vem_cvdu/1200.COM new file mode 100644 index 0000000000000000000000000000000000000000..d00960b0f400151392390ab49b5636cdf3badc9d GIT binary patch literal 128 vcmZQzV6bbroNbqIIm3?Oa;6>gg3rRjoY+vxq z;YNel^nG0#Xq_eN`xXi1a>+F_v=&L`OcB2{Lxj}g0cW%prw+!+A7;|tw`g|N?MVcj zR=rM(-HeJX^m~;)B0fJk+*prWggzvaAMHDTwoIE+PuX}13^~?MWW5xT`fvmdItPN~0>*nGoA_)5M9nCw zSK7DW+f@tq3OYUlr(fZX8IhceX3MCbA4TJH%kSU|cCLJY*H$MG9uOlXr}4>ld0ut* z3g9%H)pU!WPZhV@cBv21E$N-!Qn}@Qeqlp?`5Lt zObS#5@&@Nj(V@UgOAK_?^N3zXt*ngcpjMdD(~IhHE7n;d3Xo-Tp(+}2Y@V?Kgy$xd zD+!clWW^}TdEMYhlAcO{FnwC8^x|nQYb9ktxZ}-~sxTzPXtv8Q?s_enkn#&poCn$F4s#LyTh%yg+;!)ea(3C2O5SGg`+=jHq}p`4tZ$e;oNKpcD$ Ha(w;*Z%_k{ literal 0 HcmV?d00001 diff --git a/branches/wbw/RomDsk/cfg_n8vem_cvdu/LDTIM.COM b/branches/wbw/RomDsk/cfg_n8vem_cvdu/LDTIM.COM new file mode 100644 index 0000000000000000000000000000000000000000..1b3e2d1010a4ef4f90247c6a50f800eb7ff0b6c3 GIT binary patch literal 3584 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 ZGdMq-iO1-y$GC@l;4(OlJ|03c*MII)ukio? literal 0 HcmV?d00001 diff --git a/branches/wbw/RomDsk/cfg_n8vem_cvdu/T5.COM b/branches/wbw/RomDsk/cfg_n8vem_cvdu/T5.COM new file mode 100644 index 0000000000000000000000000000000000000000..ab55d7594228814e098f59f869ebdc0853077c71 GIT binary patch literal 96 zcmdO5WKdRC7L;aW0w2Eg0 mD$|N()UMg8@Y^Z@D9ddN6j5LWYqd&b{HLdI3aIypwFm$o4;Rw_ literal 0 HcmV?d00001 diff --git a/branches/wbw/RomDsk/cfg_n8vem_cvdu/XM.COM b/branches/wbw/RomDsk/cfg_n8vem_cvdu/XM.COM new file mode 100644 index 0000000000000000000000000000000000000000..abcc6828ee42c017913236211641ddcf5558b163 GIT binary patch literal 5375 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 literal 0 HcmV?d00001 diff --git a/branches/wbw/RomDsk/cfg_n8vem_cvdu/XM5.COM b/branches/wbw/RomDsk/cfg_n8vem_cvdu/XM5.COM new file mode 100644 index 0000000000000000000000000000000000000000..8ea2b66108110674084d8d5a4be9e590645554e1 GIT binary patch literal 3072 zcmeHI?Qc_67(chY?Y*bEvWb%y1D=hEZXGad5Ur!8+}@2!*E?@JUZRtXQ5n#!%Q|oy zWzHDm2R{)L`G$$a4}NM)Bqbn*-8#~HnVJ;~_^~*y9OB_6NeD zAW=GFAtgfKS9T;R9UXy4(Br9cb(~5KlOu5wB_Ab+NK}pl-zF-7DR^c(sw~N&{c@G7 zfd*{!q=VjeZ0@8NMH&-k?{M@xKI1)&>5`p_yl)g|f8EUgvVo@_e)cymr*VFsekrom z9WEzeX5k)Bi332lg~BofCPx6QDhGmxNKC0XL-c}ecBhR_3*dqNVP9Iz)q$=6Q;GyI zRo9KiO`@H!SwJHSvFt?x9Wse_%2KE;BwO$roX?D#?-(PtEeODVn;183 zehGm3PUBWkHC?mc+8|6o>G5<$0($^y1svHER-}D^I+LetLX@qzy)QtZJ|QBYFzUHa<8Qh)O!6%P$i*%YFe03E^Etp$FKzfa2;5k?6_il zWrxEt?+|t)N^so-T0Q%?S^LJ$z#0Ynd#jsQG)TY@Zuh0|W#g{B^|E$?*Eic%k2h&I z?eqw!TxV9HV7Uu6zZ0^f`#F}Q6fXVmU|XvW$6?W|RrC5N+okW}F?gSWC!<3l-W6w$ z@uoBXIKQ`^gv>Y##Fb)-`md}uU)23o6rrYJyrq5^(>!cU&CGKTS87&P@Y>k|&$$r3 zpT6`jV1NWeZEdnDM`DEWx6Hsk0;fW!TnrC!k5I!ttjRj#D^P8V?+HQ)^{)1zhDDc^7)N5$u^J21CrV0 zTaKTn&pSrEgLoWV<<2`Y;I<55jpfwkw47RZ-a=v_h4!^Dp>1?RYg?Ew!X=s5-cYne zdU%%tR3S~#m>SyC#d=vYi7Kjk$g;qi$?-&-D1-3<$SFZhgP6X|ZXbCS(RORHH$Kux zqE>=ZRjyZi1_y_dBggxDhU1CRlEPi*{8m&}>pwn_Y9^?d76eE^c{3I7O_AXwNyP__ zlAdAmdP@sA(sSx)ap`$a6VZmX0@%N<)BLYQ^@?ss!lhFZgyv_=t|^2poUn_tR#tj_hv@EXs_wa&Gj#E z(60N%O&3y(un#lkLquCK5}8}X;gVpiY$HT^`?r??jb&y4(_eI`!or6bTKCNaJd zX9~G<;^NId-D(tOZQhiOpG0%Laf06jPwt|~KDv5cf@RTJP1oTJupGF~dck404Un#)vxPJKTv>Pu7ePEl#<$D@LBc3m>P?$~r2PCuwVcJ@IXaLJ3A)a0VRlmUeBn+MTY icX3f?lk}xx-oK)wCx*nKYZ$FO9ZxgxGz0%%2L1+F7h!t< literal 0 HcmV?d00001 diff --git a/branches/wbw/Source/bnk1.asm b/branches/wbw/Source/bnk1.asm index 2bee8d21..d7a67dd2 100644 --- a/branches/wbw/Source/bnk1.asm +++ b/branches/wbw/Source/bnk1.asm @@ -50,6 +50,12 @@ INITSYS1: #IF (VDUENABLE) CALL VDU_INIT #ENDIF +#IF (CVDUENABLE) + CALL CVDU_INIT +#ENDIF +#IF (UPD7220ENABLE) + CALL UPD7220_INIT +#ENDIF #IF (N8VENABLE) CALL N8V_INIT #ENDIF @@ -159,6 +165,18 @@ CIO_DISPATCH: #IF (VDUENABLE) CP CIODEV_VDU JP Z,VDU_DISPCIO +#ENDIF +#IF (CVDUENABLE) + CP CIODEV_CVDU + JP Z,CVDU_DISPCIO +#ENDIF +#IF (UPD7220ENABLE) + CP CIODEV_UPD7220 + JP Z,UPD7220_DISPCIO +#ENDIF +#IF (N8VENABLE) + CP CIODEV_N8V + JP Z,N8V_DISPCIO #ENDIF CP CIODEV_CRT JR Z,CIOEMU @@ -326,12 +344,12 @@ EMU_INI: #ENDIF #IF (UPD7220ENABLE) LD HL,UPD7220_DISPVDA - CP VDADEV_7220 + CP VDADEV_UPD7220 JR Z,EMU_INI1 #ENDIF #IF (N8VENABLE) LD HL,N8V_DISPVDA - CP VDADEV_N8 + CP VDADEV_N8V JR Z,EMU_INI1 #ENDIF CALL PANIC @@ -371,12 +389,12 @@ VDA_DISPADR .EQU 0 VDA_DISPADR .SET VDU_DISPVDA #ENDIF #IF (CVDUENABLE & (DEFVDA == VDADEV_CVDU)) -VDA_DISPADR .SET CVDU_DISPATCH +VDA_DISPADR .SET CVDU_DISPVDA #ENDIF -#IF (VDUENABLE & (DEFVDA == VDADEV_7220)) -VDA_DISPADR .SET UPD7220_DISPATCH +#IF (VDUENABLE & (DEFVDA == VDADEV_UPD7220)) +VDA_DISPADR .SET UPD7220_DISPVDA #ENDIF -#IF (N8VENABLE & (DEFVDA == VDADEV_N8)) +#IF (N8VENABLE & (DEFVDA == VDADEV_N8V)) VDA_DISPADR .SET N8V_DISPVDA #ENDIF ; @@ -408,14 +426,14 @@ VDA_DISPATCH: #ENDIF #IF (CVDUENABLE) CP VDADEV_CVDU - JP Z,CVDU_DISPATCH + JP Z,CVDU_DISPVDA #ENDIF #IF (UPD7220ENABLE) CP VDADEV_7220 - JP Z,UPD7220_DISPATCH + JP Z,UPD7220_DISPVDA #ENDIF #IF (N8VENABLE) - CP VDADEV_N8 + CP VDADEV_N8V JP Z,N8V_DISPVDA #ENDIF CALL PANIC @@ -520,6 +538,24 @@ SIZ_VDU .EQU $ - ORG_VDU .ECHO " bytes.\n" #ENDIF ; +#IF (CVDUENABLE) +ORG_CVDU .EQU $ + #INCLUDE "cvdu.asm" +SIZ_CVDU .EQU $ - ORG_CVDU + .ECHO "CVDU occupies " + .ECHO SIZ_CVDU + .ECHO " bytes.\n" +#ENDIF +; +#IF (UPD7220ENABLE) +ORG_UPD7220 .EQU $ + #INCLUDE "upd7220.asm" +SIZ_UPD7220 .EQU $ - ORG_UPD7220 + .ECHO "UPD7220 occupies " + .ECHO SIZ_UPD7220 + .ECHO " bytes.\n" +#ENDIF +; #IF (N8VENABLE) ORG_N8V .EQU $ #INCLUDE "n8v.asm" @@ -652,8 +688,8 @@ DIOBUF .DW $FD00 ; PTR TO 512 BYTE DISK XFR BUFFER STR_BANNER .DB "N8VEM HBIOS v", BIOSVER, " (" VAR_LOC .DB VARIANT, "-" TST_LOC .DB TIMESTAMP, ")\r\n" - .DB PLATFORM_NAME, DSKYLBL, VDULBL, FDLBL, IDELBL, PPIDELBL, - .DB SDLBL, PRPLBL, PPPLBL, HDSKLBL, "\r\n$" + .DB PLATFORM_NAME, DSKYLBL, VDULBL, CVDULBL, UPD7220LBL, N8VLBL, + .DB FDLBL, IDELBL, PPIDELBL, SDLBL, PRPLBL, PPPLBL, HDSKLBL, "\r\n$" ; ;================================================================================================== ; FILL REMAINDER OF BANK diff --git a/branches/wbw/Source/config_n8_2312.asm b/branches/wbw/Source/config_n8_2312.asm index d7b21bf8..92fa62f9 100644 --- a/branches/wbw/Source/config_n8_2312.asm +++ b/branches/wbw/Source/config_n8_2312.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_N8 ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_N8V ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8_2511.asm b/branches/wbw/Source/config_n8_2511.asm index bbb738b8..965544dd 100644 --- a/branches/wbw/Source/config_n8_2511.asm +++ b/branches/wbw/Source/config_n8_2511.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8 ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_N8 ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_N8V ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem.asm b/branches/wbw/Source/config_n8vem.asm index 3f5d1fef..8c44ba1a 100644 --- a/branches/wbw/Source/config_n8vem.asm +++ b/branches/wbw/Source/config_n8vem.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_cvdu.asm b/branches/wbw/Source/config_n8vem_cvdu.asm new file mode 100644 index 00000000..f51bf15e --- /dev/null +++ b/branches/wbw/Source/config_n8vem_cvdu.asm @@ -0,0 +1,92 @@ +; +;================================================================================================== +; ROMWBW 2.X CONFIGURATION FOR N8VEM SBC W/ VDU 5/8/2012 +;================================================================================================== +; +; BUILD CONFIGURATION OPTIONS +; +CPUFREQ .EQU 8 ; IN MHZ, USED TO COMPUTE DELAY FACTORS +; +PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 +; +DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON +ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) +DEFVDA .EQU VDADEV_CVDU ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) +DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) +; +RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! +CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) +; +DSKMAP .EQU DM_RAM ; DM_ROM, DM_RAM, DM_FD, DM_IDE, DM_PPIDE, DM_SD, DM_PRPSD, DM_PPPSD +; +DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE) +; +UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) +UARTFIFO .EQU TRUE ; TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) +UARTAFC .EQU FALSE ; TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) +; +VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT +CVDUENABLE .EQU TRUE ; TRUE FOR CVDU BOARD SUPPORT +UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT +N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT +; +DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) +ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) +WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM +DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS +; +FDENABLE .EQU FALSE ; TRUE FOR FLOPPY SUPPORT +FDMODE .EQU FDMODE_DIO ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3 +FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE) +FDMEDIA .EQU FDM144 ; FDM720, FDM144, FDM360, FDM120 (ONLY RELEVANT IF FDENABLE = TRUE) +FDMEDIAALT .EQU FDM720 ; ALTERNATE MEDIA TO TRY, SAME CHOICES AS ABOVE (ONLY RELEVANT IF FDMAUTO = TRUE) +FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY +; +IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT +IDEMODE .EQU IDEMODE_DIO ; IDEMODE_DIO, IDEMODE_DIDE +IDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) +IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +; +PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) +PPIDEMODE .EQU PPIDEMODE_STD ; PPIDEMODE_STD, PPIDEMODE_DIO3 +PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) +PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) +PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +PPIDESLOW .EQU FALSE ; ADD DELAYS TO HELP PROBLEMATIC HARDWARE (TRY THIS IF PPIDE IS UNRELIABLE) +; +SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT +SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +SDCSIO .EQU FALSE ; TRUE IF USING THE CSIO PORT (N8 ONLY) +SDCSIOFAST .EQU FALSE ; TRUE IF USING THE LOOKUP TABLE RATHER THAN SHIFTS AND ROTATES (N8 ONLY) +PPISD .EQU FALSE ; TRUE IF USING PPISD MINI-BOARD (DO NOT COMBINE WITH PPIDE) +; +PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PRPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PRPSDENABLE = TRUE) +PRPSDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +PRPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) +; +PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT +PPPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) +PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE) +PPPSDCAPACITY .EQU 64 ; CAPACITY OF PPP SD DEVICE (IN MB) +PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) +; +HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT +HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) +HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) +; +PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD +KBDENABLE .EQU TRUE ; TRUE FOR PS/2 KEYBOARD ON I8242 +; +TTYENABLE .EQU TRUE ; INCLUDE TTY EMULATION SUPPORT +ANSIENABLE .EQU TRUE ; INCLUDE ANSI EMULATION SUPPORT +; +BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) +BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE +BOOT_DEFAULT .EQU 'R' ; SELECTION TO INVOKE AT TIMEOUT +; +BAUDRATE .EQU 38400 ; IN BPS: 1200, 9600, 38400, ..., 115200 +TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2 diff --git a/branches/wbw/Source/config_n8vem_dide.asm b/branches/wbw/Source/config_n8vem_dide.asm index dec3b14b..75594496 100644 --- a/branches/wbw/Source/config_n8vem_dide.asm +++ b/branches/wbw/Source/config_n8vem_dide.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_diskio.asm b/branches/wbw/Source/config_n8vem_diskio.asm index 3be93632..18720748 100644 --- a/branches/wbw/Source/config_n8vem_diskio.asm +++ b/branches/wbw/Source/config_n8vem_diskio.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_diskio3.asm b/branches/wbw/Source/config_n8vem_diskio3.asm index a06e44ce..9e2aa938 100644 --- a/branches/wbw/Source/config_n8vem_diskio3.asm +++ b/branches/wbw/Source/config_n8vem_diskio3.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_ppide.asm b/branches/wbw/Source/config_n8vem_ppide.asm index 77a51f2a..1cb4fecf 100644 --- a/branches/wbw/Source/config_n8vem_ppide.asm +++ b/branches/wbw/Source/config_n8vem_ppide.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_ppisd.asm b/branches/wbw/Source/config_n8vem_ppisd.asm index 8131c327..94ece388 100644 --- a/branches/wbw/Source/config_n8vem_ppisd.asm +++ b/branches/wbw/Source/config_n8vem_ppisd.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_propio.asm b/branches/wbw/Source/config_n8vem_propio.asm index dc32007e..01c3ebed 100644 --- a/branches/wbw/Source/config_n8vem_propio.asm +++ b/branches/wbw/Source/config_n8vem_propio.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_PRPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_n8vem_vdu.asm b/branches/wbw/Source/config_n8vem_vdu.asm index bc94f341..96829b89 100644 --- a/branches/wbw/Source/config_n8vem_vdu.asm +++ b/branches/wbw/Source/config_n8vem_vdu.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_VDU ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_VDU ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_simh.asm b/branches/wbw/Source/config_simh.asm index 6aeefb25..6878660a 100644 --- a/branches/wbw/Source/config_simh.asm +++ b/branches/wbw/Source/config_simh.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_N8VEM ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_zeta.asm b/branches/wbw/Source/config_zeta.asm index 1c775ae3..a51f84b5 100644 --- a/branches/wbw/Source/config_zeta.asm +++ b/branches/wbw/Source/config_zeta.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/config_zeta_ppp.asm b/branches/wbw/Source/config_zeta_ppp.asm index e5967e62..63ebc89d 100644 --- a/branches/wbw/Source/config_zeta_ppp.asm +++ b/branches/wbw/Source/config_zeta_ppp.asm @@ -11,7 +11,7 @@ PLATFORM .EQU PLT_ZETA ; PLT_N8VEM, PLT_ZETA, PLT_N8 ; DEFCON .EQU CIODEV_PPPCON ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_VDU, DIODEV_PRPCON ALTCON .EQU CIODEV_UART ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) -DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_7220, VDADEV_N8) +DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_UPD7220, VDADEV_N8V) DEFEMU .EQU EMUTYP_TTY ; DEFAULT EMULATION TYPE (EMUTYP_TTY, EMUTYP_ANSI, ...) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! diff --git a/branches/wbw/Source/cvdu.asm b/branches/wbw/Source/cvdu.asm new file mode 100644 index 00000000..794d0e15 --- /dev/null +++ b/branches/wbw/Source/cvdu.asm @@ -0,0 +1,662 @@ +;__CVDUDRIVER_______________________________________________________________________________________ +; +; COLOR VDU DRIVER FOR N8VEM PROJECT +; +; WRITTEN BY: DAN WERNER -- 11/4/2011 +; REMAINDER WRITTEN BY: DAN WERNER -- 11/7/2009 +; ROMWBW ADAPTATION BY: WAYNE WARTHEN -- 11/9/2012 +;__________________________________________________________________________________________________ +; +;__________________________________________________________________________________________________ +; DATA CONSTANTS +;__________________________________________________________________________________________________ +; +CVDU_STAT .EQU $E4 ; READ M8563 STATUS +CVDU_REG .EQU $E4 ; SELECT M8563 REGISTER +CVDU_DATA .EQU $EC ; READ/WRITE M8563 DATA +; +;__________________________________________________________________________________________________ +; BOARD INITIALIZATION +;__________________________________________________________________________________________________ +; +CVDU_INIT: + LD A,14 + LD (CVDU_COLOR),A + XOR A + LD (CVDU_X),A + LD (CVDU_Y),A + LD DE,0 + LD (CVDU_DISPLAYPOS),DE + LD (CVDU_DISPLAY_START),DE + + CALL CVDU_CRTINIT + CALL CVDU_LOADFONT + LD A,'#' + LD DE,$800 + CALL CVDU_FILL + CALL CVDU_XY + + XOR A + RET +; +;__________________________________________________________________________________________________ +; CHARACTER I/O (CIO) FUNCTION JUMP TABLE +;__________________________________________________________________________________________________ +; +CVDU_DISPCIO: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JR Z,CVDU_CIOIN + DEC A + JR Z,CVDU_CIOOUT + DEC A + JR Z,CVDU_CIOIST + DEC A + JR Z,CVDU_CIOOST + CALL PANIC +; +CVDU_CIOIN: + JP KBD_READ +; +CVDU_CIOIST: + JP KBD_STAT +; +CVDU_CIOOUT: + JP CVDU_VDAWRC +; +CVDU_CIOOST: + XOR A + INC A + RET +; +;__________________________________________________________________________________________________ +; VIDEO DISPLAY ADAPTER (VDA) FUNCTION JUMP TABLE +;__________________________________________________________________________________________________ +; +CVDU_DISPVDA: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + + JR Z,CVDU_VDAINI + DEC A + JR Z,CVDU_VDAQRY + DEC A + JR Z,CVDU_VDARES + DEC A + JR Z,CVDU_VDASCS + DEC A + JR Z,CVDU_VDASCP + DEC A + JR Z,CVDU_VDASAT + DEC A + JR Z,CVDU_VDASCO + DEC A + JR Z,CVDU_VDAWRC + DEC A + JR Z,CVDU_VDAFIL + DEC A + JR Z,CVDU_VDASCR + DEC A + JP Z,KBD_STAT + DEC A + JP Z,KBD_FLUSH + DEC A + JP Z,KBD_READ + CALL PANIC + +CVDU_VDAINI: + CALL CVDU_INIT + XOR A + RET + +CVDU_VDAQRY: + CALL PANIC + +CVDU_VDARES: + JP CVDU_INIT + +CVDU_VDASCS: + CALL PANIC + +CVDU_VDASCP: + LD A,E + LD (CVDU_X),A + LD A,D + LD (CVDU_Y),A + CALL CVDU_XY + XOR A + RET + +CVDU_VDASAT: + ; FIX: NOT IMPLEMENTED!!! + CALL PANIC + +CVDU_VDASCO: + ; NOT SUPPORTED!!! + CALL PANIC + +CVDU_VDAWRC: + LD A,E + CALL CVDU_PUTCHAR + + ; RETURN WITH SUCCESS + XOR A + RET + +CVDU_VDAFIL: + LD A,E + EX DE,HL + CALL CVDU_FILL + XOR A ; RESULT = 0 + RET + +CVDU_VDASCR: + ; FIX: IMPLEMENT REVERSE SCROLLING!!! + LD A,E + OR A + RET Z + PUSH DE + CALL CVDU_SCROLL + POP DE + DEC E + JR CVDU_VDASCR +; +CVDU_WAITRDY: +; IN A,(CVDU_STREG) ; READ STATUS +; OR A ; SET FLAGS +; RET M ; IF BIT 7 SET, THEN READY! +; JR CVDU_WAITRDY ; KEEP CHECKING +; +;__CVDU_CRTINIT_____________________________________________________________________________________ +; +; INIT 8563 VDU CHIP +;__________________________________________________________________________________________________ +CVDU_CRTINIT: + LD B,$00 ; B = 0 + LD HL,CVDU_INIT8563 ; HL = POINTER TO THE DEFAULT VALUES +CVDU_CRTINIT1: + LD A,(HL) ; GET VALUE + CALL CVDU_WREG ; WRITE IT + INC HL + INC B + LD A,B + CP 37 + JR NZ,CVDU_CRTINIT1 ; LOOP UNTIL DONE + RET +; +;__CVDU_LOADFONT____________________________________________________________________________________ +; +; LOAD SCREEN FONT +;__________________________________________________________________________________________________ +CVDU_LOADFONT: + LD HL,$2000 ; SET FONT LOCATION + LD B,18 ; SET UPDATE ADDRESS IN VDU + LD A,H + CALL CVDU_WREG ; WRITE IT + LD B,19 ; SET UPDATE ADDRESS IN VDU + LD A,L + CALL CVDU_WREG ; WRITE IT + LD BC,$0020 ; FONT SIZE + LD HL,CVDU_FONTDATA ; FONT DATA +CVDU_LOADFONT1: + IN A,(CVDU_STAT) ; READ ADDRESS/STATUS REGISTER + BIT 7,A ; IF BIT 7 = 1 THAN AN UPDATE STROBE HAS BEEN OCCURED + JR Z,CVDU_LOADFONT1 ; WAIT FOR READY + LD A,31 + OUT (CVDU_REG),A ; SELECT REGISTER +CVDU_LOADFONT2: + IN A,(CVDU_STAT) ; READ ADDRESS/STATUS REGISTER + BIT 7,A ; IF BIT 7 = 1 THAN AN UPDATE STROBE HAS BEEN OCCURED + JR Z,CVDU_LOADFONT2 ; WAIT FOR READY + LD A,(HL) + OUT (CVDU_DATA),A ; PUT DATA + INC HL + DJNZ CVDU_LOADFONT1 + DEC C + JP NZ,CVDU_LOADFONT1 + RET +;__CVDU_WREG________________________________________________________________________________________ +; +; WRITE VALUE IN A TO REGISTER IN B +; B: REGISTER TO UPDATE +; A: VALUE TO WRITE +;__________________________________________________________________________________________________ +CVDU_WREG: + PUSH AF ; STORE AF +CVDU_WREG1: + IN A,(CVDU_STAT) ; read address/status register + BIT 7,A ; if bit 7 = 1 than an update strobe has been occured + JR Z,CVDU_WREG1 ; wait for ready + LD A,B ; + OUT (CVDU_REG),A ; select register +CVDU_WREG2: + IN A,(CVDU_STAT) ; read address/status register + BIT 7,A ; if bit 7 = 1 than an update strobe has been occured + JR Z,CVDU_WREG2 ; wait for ready + POP AF ; + OUT (CVDU_DATA),A ; PUT DATA + RET +; +;__CVDU_GREG________________________________________________________________________________________ +; +; GET VALUE FROM REGISTER IN B PLACE IN A +; B: REGISTER TO GET +; A: VALUE +;__________________________________________________________________________________________________ +CVDU_GREG: + IN A,(CVDU_STAT) ; read address/status register + BIT 7,A ; if bit 7 = 1 than an update strobe has been occured + JR Z,CVDU_GREG ; wait for ready + LD A,B ; + OUT (CVDU_REG) , A ; select register +CVDU_GREG1: + IN A,(CVDU_STAT) ; read address/status register + BIT 7,A ; if bit 7 = 1 than an update strobe has been occured + JR Z,CVDU_GREG1 ; wait for ready + IN A,(CVDU_DATA) ; GET DATA + RET +; +;__CVDU_XY__________________________________________________________________________________________ +; +; MOVE CURSOR TO POSITON IN CVDU_X AND CVDU_Y +;__________________________________________________________________________________________________ +CVDU_XY: + LD A,(CVDU_Y) + LD H,A + LD DE,80 + CALL MULT8 ; HL := H * E (D & L ARE CLEARED) + LD A,(CVDU_X) + LD E,A + ADD HL,DE + LD (CVDU_DISPLAYPOS),HL + LD DE,(CVDU_DISPLAY_START) + ADD HL,DE + LD B,14 ; SET UPDATE CSR POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + INC B ; SET UPDATE CSR POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + RET +; +;__CVDU_SCROLL_______________________________________________________________________________________ +; +; SCROLL THE SCREEN UP ONE LINE +;__________________________________________________________________________________________________ +CVDU_SCROLL: + ; SET MODE TO BLOCK COPY + LD A,$80 + LD B,24 + CALL CVDU_WREG + + LD HL,0 ; SOURCE + LD C,23 ; ITERATIONS +CVDU_SCROLL1: + ; BLOCK COPY DESTINATION + LD B,18 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + + LD DE,80 + ADD HL,DE + + ; BLOCK COPY SOURCE + LD B,32 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + +CVDU_SCROLL2: + ; BLOCK COPY COUNT + LD A,80 + LD B,30 + CALL CVDU_WREG + + ; LOOP TILL DONE WITH ALL LINES + DEC C + JR NZ,CVDU_SCROLL2 + + ; SET MODE TO BLOCK WRITE + XOR A + LD B,24 + CALL CVDU_WREG + + ; SET CHARACTER TO WRITE + LD A,'=' + LD B,31 + CALL CVDU_WREG + + ; BLOCK COPY COUNT + LD A,80 - 1 + LD B,30 + CALL CVDU_WREG + + RET +; +;__CVDU_RSCROLL__________________________________________________________________________________ +; +; SCROLL THE SCREEN DOWN ONE LINE +;__________________________________________________________________________________________________ +CVDU_RSCROLL: + PUSH AF ; STORE AF + PUSH HL ; STORE HL + PUSH BC ; STORE BC + + LD B, 24 ; GET REGISTER 24 + CALL CVDU_GREG ; + OR 80H ; TURN ON COPY BIT + LD E,A ; PARK IT + + LD HL, (CVDU_DISPLAY_START) ; GET UP START OF DISPLAY + LD BC,0730H ; + ADD HL,BC + LD D,23 ; +CVDU_RSCROLL1: + LD B, 18 ; SET UPDATE(DEST) POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + LD B, 19 ; SET UPDATE(DEST) POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + LD BC,0FFB0H ; + ADD HL,BC ; + LD B, 32 ; SET SOURCE POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + LD B, 33 ; SET SOURCE POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + + LD B, 24 ; SET COPY + LD A,E ; + CALL CVDU_WREG ; WRITE IT + + LD B, 30 ; SET AMOUNT TO COPY + LD A,050H ; + CALL CVDU_WREG ; WRITE IT + + DEC D + LD A,D ; + CP 00H ; + JP NZ,CVDU_RSCROLL1 ; LOOP TILL DONE + + + LD HL, (CVDU_DISPLAY_START) ; GET UP START OF DISPLAY + LD BC,0F50H ; + ADD HL,BC + LD D,23 ; +CVDU_RSCROLL2: + LD B, 18 ; SET UPDATE(DEST) POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + LD B, 19 ; SET UPDATE(DEST) POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + LD BC,0FFB0H ; + ADD HL,BC ; + LD B, 32 ; SET SOURCE POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + LD B, 33 ; SET SOURCE POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + + LD B, 24 ; SET COPY + LD A,E ; + CALL CVDU_WREG ; WRITE IT + + LD B, 30 ; SET AMOUNT TO COPY + LD A,050H ; + CALL CVDU_WREG ; WRITE IT + + DEC D + LD A,D ; + CP 00H ; + JP NZ,CVDU_RSCROLL2 ; LOOP TILL DONE + LD A,0 ; SET CURSOR TO BEGINNING OF FIRST LINE + LD (CVDU_Y),A ; + LD A,(CVDU_X) ; + PUSH AF ; STORE X COORD + LD A,0 ; + LD (CVDU_X),A ; + CALL CVDU_XY ; SET CURSOR POSITION TO BEGINNING OF LINE + POP AF ; RESTORE AF + POP BC ; RESTORE BC + CALL CVDU_ERASE_EOL ; ERASE SCROLLED LINE + LD (CVDU_X),A ; + CALL CVDU_XY ; SET CURSOR POSITION + POP HL ; RESTORE HL + POP AF ; RESTORE AF + RET ; +; +;__CVDU_ERASE_EOL__________________________________________________________________________________ +; +; PERFORM ERASE FROM CURSOR POS TO END OF LINE +; C=DEFAULT COLOR +;__________________________________________________________________________________________________ +CVDU_ERASE_EOL: + PUSH HL + PUSH AF + PUSH BC + + LD A,(CVDU_X) ; GET CURRENT CURSOR X COORD + LD D,A ; STORE IT IN C + LD A,80 ; MOVE CURRENT LINE WIDTH INTO A + SUB D ; GET REMAINING POSITIONS ON CURRENT LINE + LD B,A ; MOVE IT INTO B +CVDU_ERASE_EOL1: + LD A, ' ' ; MOVE SPACE CHARACTER INTO A + CALL CVDU_PUTCHAR ; + DJNZ CVDU_ERASE_EOL1 ; LOOP UNTIL DONE + CALL CVDU_XY ; MOVE CURSOR BACK TO ORIGINAL POSITION + POP BC + POP AF + POP HL + RET +; +;__CVDU_ERASE_EOS__________________________________________________________________________________ +; +; PERFORM ERASE FROM CURSOR POS TO END OF SCREEN +; C= DEFAULT COLOR +;__________________________________________________________________________________________________ +CVDU_ERASE_EOS: + PUSH HL + PUSH AF + PUSH BC + + LD HL, (CVDU_DISPLAYPOS) ; GET CURRENT DISPLAY ADDRESS + LD B, 18 ; SET UPDATE CSR POS IN VDU + LD A,H ; + CALL CVDU_WREG ; WRITE IT + LD B, 19 ; SET UPDATE CSR POS IN VDU + LD A,L ; + CALL CVDU_WREG ; WRITE IT + LD DE,0820H ; SET SCREEN SIZE INTO HL +CVDU_ERASE_EOS1: + LD A, ' ' ; MOVE SPACE CHARACTER INTO A + LD B,31 ; + CALL CVDU_WREG ; WRITE IT TO SCREEN, VDU WILL AUTO INC TO NEXT ADDRESS + DEC DE ; DEC COUNTER + LD A,D ; IS COUNTER 0 YET? + OR E ; + JP NZ,CVDU_ERASE_EOS1 ; NO, LOOP + LD DE,0820H ; SET SCREEN SIZE INTO HL +CVDU_ERASE_EOS2: + LD A, (CVDU_COLOR) ; MOVE COLOR INTO A + LD B,31 ; + CALL CVDU_WREG ; WRITE IT TO SCREEN, VDU WILL AUTO INC TO NEXT ADDRESS + DEC DE ; DEC COUNTER + LD A,D ; IS COUNTER 0 YET? + OR E ; + JP NZ,CVDU_ERASE_EOS2 ; NO, LOOP + + CALL CVDU_XY ; YES, MOVE CURSOR BACK TO ORIGINAL POSITION + POP BC + POP AF + POP HL + RET +; +;__________________________________________________________________________________________________ +CVDU_PUTCHAR: +; PLACE CHARACTER ON SCREEN, ADVANCE CURSOR +; A: CHARACTER TO OUTPUT +; + PUSH AF + LD HL,(CVDU_DISPLAY_START) + LD DE,(CVDU_DISPLAYPOS) + ADD HL,DE + INC DE + LD (CVDU_DISPLAYPOS),DE + LD B,18 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + POP AF + LD B,31 + CALL CVDU_WREG + PUSH HL + INC HL + LD B,14 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + POP HL + LD DE,$800 + ADD HL,DE + LD B,18 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + LD A,(CVDU_COLOR) + LD B,31 + CALL CVDU_WREG + RET +;__________________________________________________________________________________________________ +CVDU_FILL: +; +; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE +; STARTING WITH THE CURRENT FRAME BUFFER POSITION +; A: FILL CHARACTER +; DE: NUMBER OF CHARACTERS TO FILL +; + PUSH AF + PUSH DE + LD HL,(CVDU_DISPLAY_START) + LD DE,(CVDU_DISPLAYPOS) + ADD HL,DE + LD B,18 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + POP DE + POP AF + PUSH DE + LD C,A +CVDU_FILL1: + LD A,C + LD B,31 + CALL CVDU_WREG + DEC DE + LD A,D + OR E + JR NZ,CVDU_FILL1 + + LD DE,$800 + ADD HL,DE + POP DE + LD B,18 + LD A,H + CALL CVDU_WREG + INC B + LD A,L + CALL CVDU_WREG + LD A,(CVDU_COLOR) + LD C,A +CVDU_FILL2: + LD A,C + LD B,31 + CALL CVDU_WREG + DEC DE + LD A,D + OR E + JR NZ,CVDU_FILL2 + + RET +; +;================================================================================================== +; VDU DRIVER - DATA +;================================================================================================== +; +CVDU_X .DB 0 ; CURSOR X +CVDU_Y .DB 0 ; CURSOR Y +CVDU_COLOR .DB 0 ; CURRENT COLOR +CVDU_DISPLAYPOS .DW 0 ; CURRENT DISPLAY POSITION +CVDU_DISPLAY_START .DW 0 ; CURRENT DISPLAY POSITION +; +;================================================================================================== +; VDU DRIVER - 8563 REGISTER INITIALIZATION +;================================================================================================== +; +; EGA 720X368 9-BIT CHARACTERS +; - requires 16.257Mhz oscillator frequency +; +CVDU_INIT8563: + .DB 97 ; 0: hor. total - 1 + .DB 80 ; 1: hor. displayed + .DB 85 ; 2: hor. sync position + .DB $14 ; 3: vert/hor sync width or 0x4F -- MDA + .DB 26 ; 4: vert total + .DB 2 ; 5: vert total adjust + .DB 25 ; 6: vert. displayed + .DB 26 ; 7: vert. sync postition + .DB 0 ; 8: interlace mode + .DB 13 ; 9: char height - 1 + .DB (2<<5)+12 ; 10: cursor mode, start line + .DB 13 ; 11: cursor end line + .DB 0 ; 12: display start addr hi + .DB 0 ; 13: display start addr lo + .DB 7 ; 14: cursor position hi + .DB 128 ; 15: cursor position lo + .DB 1 ; 16: light pen vertical + .DB 1 ; 17: light pen horizontal + .DB 0 ; 18: update address hi + .DB 0 ; 19: update address lo + .DB 8 ; 20: attribute start addr hi + .DB 0 ; 21: attribute start addr lo + .DB $89 ; 22: char hor size cntrl 0x78 + .DB 13 ; 23: vert char pixel space - 1, increase to 13 with new font + .DB 0 ; 24: copy/fill, reverse, blink rate; vertical scroll + .DB $48 ; 25: gr/txt, color/mono, pxl-rpt, dbl-wide; horiz. scroll + .DB $E0 ; 26: fg/bg colors (monochr) + .DB 0 ; 27: row addr display incr + .DB $20+(1<<4) ; 28: char set addr; RAM size (64/16) + .DB 13 ; 29: underline position + .DB 0 ; 30: word count - 1 + .DB 0 ; 31: data + .DB 0 ; 32: block copy src hi + .DB 0 ; 33: block copy src lo + .DB 6 ; 34: display enable begin + .DB 88 ; 35: display enable end + .DB 0 ; 36: refresh rate + +; .DB 126,80,102,73,32,224,25,29,252,231,160,231,0,0,7,128 +; .DB 18,23,15,208,8,32,120,232,32,71,240,0,47,231,79,7,15,208,125,100,245 +; +;================================================================================================== +; CVDU DRIVER - FONT DATA +;================================================================================================== +; +#INCLUDE "cvdu_font.asm" \ No newline at end of file diff --git a/branches/wbw/Source/cvdu_font.asm b/branches/wbw/Source/cvdu_font.asm new file mode 100644 index 00000000..567baef0 --- /dev/null +++ b/branches/wbw/Source/cvdu_font.asm @@ -0,0 +1,1025 @@ +CVDU_FONTDATA: + .DB $18,$18,$18,$FF,$FF,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$30,$30,$C0,$C0,$30,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $33,$33,$CC,$CC,$33,$33,$CC,$CC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $33,$99,$CC,$66,$33,$99,$CC,$66 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CC,$CC,$33,$33,$CC,$CC,$33,$33 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$03,$03,$03,$03,$03,$03,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$CC,$CC,$33,$33 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CC,$99,$33,$66,$CC,$99,$33,$66 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$03,$03,$03,$03,$03,$03,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$1F,$1F,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$1F,$1F,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$F8,$F8,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$1F,$1F,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$F8,$F8,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $07,$07,$07,$07,$07,$07,$07,$07 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $01,$03,$06,$6C,$78,$70,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$00,$00,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$FF,$66,$FF,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$3E,$60,$3C,$06,$7C,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $62,$66,$0C,$18,$30,$66,$46,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$3C,$38,$67,$66,$3F,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $06,$0C,$18,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0C,$18,$30,$30,$30,$18,$0C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $30,$18,$0C,$0C,$0C,$18,$30,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$66,$3C,$FF,$3C,$66,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$18,$7E,$18,$18,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$18,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$7E,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$03,$06,$0C,$18,$30,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$6E,$76,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$38,$18,$18,$18,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$0C,$30,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$1C,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $06,$0E,$1E,$66,$7F,$06,$06,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$7C,$06,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$7C,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$66,$0C,$18,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$3C,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$3E,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$18,$00,$00,$18,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$18,$00,$00,$18,$18,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0E,$18,$30,$60,$30,$18,$0E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7E,$00,$7E,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $70,$18,$0C,$06,$0C,$18,$70,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$0C,$18,$00,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$6E,$6E,$60,$62,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$3C,$66,$7E,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$66,$66,$7C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$60,$60,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $78,$6C,$66,$66,$66,$6C,$78,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$60,$78,$60,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$60,$78,$60,$60,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$6E,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$7E,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$18,$18,$18,$18,$18,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $1E,$0C,$0C,$0C,$0C,$6C,$38,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$6C,$78,$70,$78,$6C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $60,$60,$60,$60,$60,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $63,$77,$7F,$6B,$63,$63,$63,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$76,$7E,$7E,$6E,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$66,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$60,$60,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$66,$66,$3C,$0E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$78,$6C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$3C,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$18,$18,$18,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$66,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$66,$66,$3C,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $63,$63,$63,$6B,$7F,$77,$63,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$3C,$18,$3C,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$3C,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$06,$0C,$18,$30,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$30,$30,$30,$30,$30,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $40,$60,$30,$18,$0C,$06,$02,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$0C,$0C,$0C,$0C,$0C,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$24,$42,$42,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$30,$18,$0C,$04,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3C,$06,$3E,$66,$3E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$60,$60,$7C,$66,$66,$7C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3C,$60,$60,$60,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$06,$06,$3E,$66,$66,$3E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3C,$66,$7E,$60,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$0E,$18,$3E,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3E,$66,$66,$3E,$06,$7C + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$60,$60,$7C,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$00,$38,$18,$18,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$06,$00,$06,$06,$06,$06,$3C + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$60,$60,$6C,$78,$6C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$38,$18,$18,$18,$18,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$66,$7F,$7F,$6B,$63,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7C,$66,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3C,$66,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7C,$66,$66,$7C,$60,$60 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3E,$66,$66,$3E,$06,$06 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7C,$66,$60,$60,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3E,$60,$3C,$06,$7C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$7E,$18,$18,$18,$0E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$66,$66,$66,$66,$3E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$66,$66,$66,$3C,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$63,$6B,$7F,$3E,$36,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$66,$3C,$18,$3C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$66,$66,$66,$3E,$0C,$78 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7E,$0C,$18,$30,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$0C,$10,$10,$20,$10,$10,$0C + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$18,$18,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$04,$04,$02,$04,$04,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$32,$4C,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$81,$81,$81,$81,$81,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$91,$91,$9F,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C3,$F9,$C1,$99,$C1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$9F,$9F,$83,$99,$99,$83,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C3,$9F,$9F,$9F,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$F9,$F9,$C1,$99,$99,$C1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C3,$99,$81,$9F,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$F1,$E7,$C1,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C1,$99,$99,$C1,$F9,$83 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$9F,$9F,$83,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$FF,$C7,$E7,$E7,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$F9,$FF,$F9,$F9,$F9,$F9,$C3 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$9F,$9F,$93,$87,$93,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$C7,$E7,$E7,$E7,$E7,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$99,$80,$80,$94,$9C,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$83,$99,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C3,$99,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$83,$99,$99,$83,$9F,$9F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C1,$99,$99,$C1,$F9,$F9 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$83,$99,$9F,$9F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C1,$9F,$C3,$F9,$83,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$81,$E7,$E7,$E7,$F1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$99,$99,$99,$99,$C1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$99,$99,$99,$C3,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$9C,$94,$80,$C1,$C9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$99,$C3,$E7,$C3,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$99,$99,$99,$C1,$F3,$87 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$81,$F3,$E7,$CF,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$CF,$CF,$CF,$CF,$CF,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F3,$ED,$CF,$83,$CF,$9D,$03,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$F3,$F3,$F3,$F3,$F3,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$C3,$81,$E7,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$EF,$CF,$80,$80,$CF,$EF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E7,$FF,$FF,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$00,$99,$00,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$C1,$9F,$C3,$F9,$83,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9D,$99,$F3,$E7,$CF,$99,$B9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$C3,$C7,$98,$99,$C0,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F9,$F3,$E7,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F3,$E7,$CF,$CF,$CF,$E7,$F3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CF,$E7,$F3,$F3,$F3,$E7,$CF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$99,$C3,$00,$C3,$99,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$E7,$81,$E7,$E7,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$E7,$E7,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$81,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FC,$F9,$F3,$E7,$CF,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$91,$89,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$C7,$E7,$E7,$E7,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$F3,$CF,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$E3,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F9,$F1,$E1,$99,$80,$F9,$F9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$83,$F9,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$83,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$99,$F3,$E7,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$C3,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$C1,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$E7,$FF,$FF,$E7,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$E7,$FF,$FF,$E7,$E7,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F1,$E7,$CF,$9F,$CF,$E7,$F1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$81,$FF,$81,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $8F,$E7,$F3,$F9,$F3,$E7,$8F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$F3,$E7,$FF,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$C3,$99,$81,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$99,$99,$83,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$9F,$9F,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $87,$93,$99,$99,$99,$93,$87,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$9F,$87,$9F,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$9F,$87,$9F,$9F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$91,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$81,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$E7,$E7,$E7,$E7,$E7,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E1,$F3,$F3,$F3,$F3,$93,$C7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$93,$87,$8F,$87,$93,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9F,$9F,$9F,$9F,$9F,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9C,$88,$80,$94,$9C,$9C,$9C,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$89,$81,$81,$91,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$99,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$9F,$9F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$99,$99,$C3,$F1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$87,$93,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$C3,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$E7,$E7,$E7,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$99,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$99,$99,$C3,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9C,$9C,$9C,$94,$80,$88,$9C,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$C3,$E7,$C3,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$C3,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$F9,$F3,$E7,$CF,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$00,$00,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$CF,$CF,$3F,$3F,$CF,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E7,$E7,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CC,$CC,$33,$33,$CC,$CC,$33,$33 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CC,$66,$33,$99,$CC,$66,$33,$99 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $33,$33,$CC,$CC,$33,$33,$CC,$CC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$33,$33,$CC,$CC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $33,$66,$CC,$99,$33,$66,$CC,$99 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E0,$E0,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E0,$E0,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$07,$07,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$E0,$E0,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$07,$07,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FE,$FC,$F9,$93,$87,$8F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$07,$07,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$6E,$6E,$60,$62,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$3C,$66,$7E,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$66,$66,$7C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$60,$60,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $78,$6C,$66,$66,$66,$6C,$78,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$60,$78,$60,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$60,$78,$60,$60,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$6E,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$7E,$66,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$18,$18,$18,$18,$18,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $1E,$0C,$0C,$0C,$0C,$6C,$38,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$6C,$78,$70,$78,$6C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $60,$60,$60,$60,$60,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $63,$77,$7F,$6B,$63,$63,$63,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$76,$7E,$7E,$6E,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$66,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$60,$60,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$66,$66,$3C,$0E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7C,$66,$66,$7C,$78,$6C,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$3C,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$18,$18,$18,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$66,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$66,$66,$3C,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $63,$63,$63,$6B,$7F,$77,$63,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$3C,$18,$3C,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$3C,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$06,$0C,$18,$30,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$30,$30,$30,$30,$30,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0C,$12,$30,$7C,$30,$62,$FC,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$0C,$0C,$0C,$0C,$0C,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$3C,$7E,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$10,$30,$7F,$7F,$30,$10,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$00,$00,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$66,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $66,$66,$FF,$66,$FF,$66,$66,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$3E,$60,$3C,$06,$7C,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $62,$66,$0C,$18,$30,$66,$46,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$3C,$38,$67,$66,$3F,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $06,$0C,$18,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0C,$18,$30,$30,$30,$18,$0C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $30,$18,$0C,$0C,$0C,$18,$30,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$66,$3C,$FF,$3C,$66,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$18,$18,$7E,$18,$18,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$18,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$7E,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$03,$06,$0C,$18,$30,$60,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$6E,$76,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$38,$18,$18,$18,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$0C,$30,$60,$7E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$1C,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $06,$0E,$1E,$66,$7F,$06,$06,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$60,$7C,$06,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$60,$7C,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $7E,$66,$0C,$18,$18,$18,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$3C,$66,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$66,$3E,$06,$66,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$18,$00,$00,$18,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$18,$00,$00,$18,$18,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0E,$18,$30,$60,$30,$18,$0E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$7E,$00,$7E,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $70,$18,$0C,$06,$0C,$18,$70,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$66,$06,$0C,$18,$00,$18,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $08,$1C,$3E,$7F,$7F,$1C,$3E,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$FF,$FF,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$FF,$FF,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$FF,$FF,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $30,$30,$30,$30,$30,$30,$30,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$E0,$F0,$38,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$1C,$0F,$07,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$38,$F0,$E0,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$C0,$C0,$C0,$C0,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$E0,$70,$38,$1C,$0E,$07,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$07,$0E,$1C,$38,$70,$E0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$C0,$C0,$C0,$C0,$C0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$03,$03,$03,$03,$03,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$3C,$7E,$7E,$7E,$7E,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FF,$FF,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $36,$7F,$7F,$7F,$3E,$1C,$08,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $60,$60,$60,$60,$60,$60,$60,$60 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$07,$0F,$1C,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$E7,$7E,$3C,$3C,$7E,$E7,$C3 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$3C,$7E,$66,$66,$7E,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$66,$66,$18,$18,$3C,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $06,$06,$06,$06,$06,$06,$06,$06 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $08,$1C,$3E,$7F,$3E,$1C,$08,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$FF,$FF,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$30,$30,$C0,$C0,$30,$30 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$18,$18,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$03,$3E,$76,$36,$36,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$7F,$3F,$1F,$0F,$07,$03,$01 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CC,$CC,$33,$33,$CC,$CC,$33,$33 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$03,$03,$03,$03,$03,$03,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$CC,$CC,$33,$33 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FE,$FC,$F8,$F0,$E0,$C0,$80 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$03,$03,$03,$03,$03,$03,$03 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$1F,$1F,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$1F,$1F,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$F8,$F8,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$1F,$1F,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$F8,$F8,$18,$18,$18 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E0,$E0,$E0,$E0,$E0,$E0,$E0,$E0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $07,$07,$07,$07,$07,$07,$07,$07 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $03,$03,$03,$03,$03,$03,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $18,$18,$18,$F8,$F8,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$91,$91,$9F,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$C3,$99,$81,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$99,$99,$83,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$9F,$9F,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $87,$93,$99,$99,$99,$93,$87,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$9F,$87,$9F,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$9F,$87,$9F,$9F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$91,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$81,$99,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$E7,$E7,$E7,$E7,$E7,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E1,$F3,$F3,$F3,$F3,$93,$C7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$93,$87,$8F,$87,$93,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9F,$9F,$9F,$9F,$9F,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9C,$88,$80,$94,$9C,$9C,$9C,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$89,$81,$81,$91,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$99,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$9F,$9F,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$99,$99,$C3,$F1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $83,$99,$99,$83,$87,$93,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$C3,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$E7,$E7,$E7,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$99,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$99,$99,$C3,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9C,$9C,$9C,$94,$80,$88,$9C,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$C3,$E7,$C3,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$C3,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$F9,$F3,$E7,$CF,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$CF,$CF,$CF,$CF,$CF,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F3,$ED,$CF,$83,$CF,$9D,$03,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$F3,$F3,$F3,$F3,$F3,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$C3,$81,$E7,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$EF,$CF,$80,$80,$CF,$EF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E7,$FF,$FF,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$99,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $99,$99,$00,$99,$00,$99,$99,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$C1,$9F,$C3,$F9,$83,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9D,$99,$F3,$E7,$CF,$99,$B9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$C3,$C7,$98,$99,$C0,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F9,$F3,$E7,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F3,$E7,$CF,$CF,$CF,$E7,$F3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CF,$E7,$F3,$F3,$F3,$E7,$CF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$99,$C3,$00,$C3,$99,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$E7,$E7,$81,$E7,$E7,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$E7,$E7,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$81,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FC,$F9,$F3,$E7,$CF,$9F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$91,$89,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$C7,$E7,$E7,$E7,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$F3,$CF,$9F,$81,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$E3,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F9,$F1,$E1,$99,$80,$F9,$F9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$9F,$83,$F9,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$9F,$83,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $81,$99,$F3,$E7,$E7,$E7,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$C3,$99,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$99,$C1,$F9,$99,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$E7,$FF,$FF,$E7,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$E7,$FF,$FF,$E7,$E7,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F1,$E7,$CF,$9F,$CF,$E7,$F1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$81,$FF,$81,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $8F,$E7,$F3,$F9,$F3,$E7,$8F,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C3,$99,$F9,$F3,$E7,$FF,$E7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F7,$E3,$C1,$80,$80,$E3,$C1,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E7,$E7,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$00,$00,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$00,$00,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$00,$00,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $CF,$CF,$CF,$CF,$CF,$CF,$CF,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F3,$F3,$F3,$F3,$F3,$F3,$F3,$F3 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$1F,$0F,$C7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E3,$F0,$F8,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$C7,$0F,$1F,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$3F,$3F,$3F,$3F,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$1F,$8F,$C7,$E3,$F1,$F8,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$F8,$F1,$E3,$C7,$8F,$1F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$3F,$3F,$3F,$3F,$3F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$FC,$FC,$FC,$FC,$FC,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$C3,$81,$81,$81,$81,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$00,$00,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $C9,$80,$80,$80,$C1,$E3,$F7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $9F,$9F,$9F,$9F,$9F,$9F,$9F,$9F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$F8,$F0,$E3,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3C,$18,$81,$C3,$C3,$81,$18,$3C + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$C3,$81,$99,$99,$81,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$99,$99,$E7,$E7,$C3,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F9,$F9,$F9,$F9,$F9,$F9,$F9,$F9 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F7,$E3,$C1,$80,$C1,$E3,$F7,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$00,$00,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$CF,$CF,$3F,$3F,$CF,$CF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E7,$E7,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FC,$C1,$89,$C9,$C9,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$80,$C0,$E0,$F0,$F8,$FC,$FE + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$00,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$FF,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $33,$33,$CC,$CC,$33,$33,$CC,$CC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$33,$33,$CC,$CC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$01,$03,$07,$0F,$1F,$3F,$7F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E0,$E0,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$F0,$F0,$F0,$F0 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$E0,$E0,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$07,$07,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$FF,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$E0,$E0,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$00,$00,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$00,$00,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$07,$07,$E7,$E7,$E7 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$FF,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $00,$00,$00,$FF,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$FF,$00,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FC,$FC,$FC,$FC,$FC,$FC,$00,$00 + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $E7,$E7,$E7,$07,$07,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 + .DB $0F,$0F,$0F,$0F,$FF,$FF,$FF,$FF + .DB $00,$00,$00,$00,$00,$00,$00,$00 diff --git a/branches/wbw/Source/kbd.asm b/branches/wbw/Source/kbd.asm index 6b50fbdc..3fbb1532 100644 --- a/branches/wbw/Source/kbd.asm +++ b/branches/wbw/Source/kbd.asm @@ -413,13 +413,13 @@ KBD_DEC1: ; PROCESS NEXT SCANCODE LD (KBD_SCANCODE),A ; SAVE SCANCODE KBD_DEC2: ; DETECT AND HANDLE SPECIAL KEYCODES - LD A,(KBD_SCANCODE) ; GET THE CURRENT SCANCODE - CP $AA ; KEYBOARD INSERTION? - JR NZ,KBD_DEC3 ; NOPE, BYPASS - CALL KBD_RESET ; RESET KEYBOARD - CALL KBD_SETLEDS ; SET LEDS - CALL KBD_SETRPT ; SET REPEAT RATE - JP KBD_DECNEW ; RESTART THE ENGINE +; LD A,(KBD_SCANCODE) ; GET THE CURRENT SCANCODE +; CP $AA ; KEYBOARD INSERTION? +; JR NZ,KBD_DEC3 ; NOPE, BYPASS +; CALL KBD_RESET ; RESET KEYBOARD +; CALL KBD_SETLEDS ; SET LEDS +; CALL KBD_SETRPT ; SET REPEAT RATE +; JP KBD_DECNEW ; RESTART THE ENGINE KBD_DEC3: ; DETECT AND HANDLE SCANCODE PREFIXES LD A,(KBD_SCANCODE) ; GET THE CURRENT SCANCODE diff --git a/branches/wbw/Source/std.asm b/branches/wbw/Source/std.asm index 040ef54f..20801107 100644 --- a/branches/wbw/Source/std.asm +++ b/branches/wbw/Source/std.asm @@ -44,17 +44,20 @@ BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT VDADEV_NONE .EQU $00 ; NO VDA DEVICE VDADEV_VDU .EQU $10 ; ECB VDU - 6545 CHIP VDADEV_CVDU .EQU $20 ; ECB COLOR VDU - 8563 CHIP (NOT IMPLEMENTED) -VDADEV_7220 .EQU $30 ; ECB uP7220 (NOT IMPLEMENTED) -VDADEV_N8 .EQU $40 ; N8 ONBOARD VDA SUBSYSTEM (NOT IMPLEMENTED) +VDADEV_UPD7220 .EQU $30 ; ECB uP7220 (NOT IMPLEMENTED) +VDADEV_N8V .EQU $40 ; N8 ONBOARD VDA SUBSYSTEM ; ; CHARACTER DEVICES ; CIODEV_UART .EQU $00 -CIODEV_PRPCON .EQU $10 +CIODEV_ASCI .EQU $10 CIODEV_VDU .EQU $20 CIODEV_CVDU .EQU $30 -CIODEV_PPPCON .EQU $40 -CIODEV_CRT .EQU $80 +CIODEV_UPD7220 .EQU $40 +CIODEV_N8V .EQU $50 +CIODEV_PRPCON .EQU $60 +CIODEV_PPPCON .EQU $70 +CIODEV_CRT .EQU $D0 CIODEV_BAT .EQU $E0 CIODEV_NUL .EQU $F0 ; @@ -498,6 +501,24 @@ CCPSIZ: .EQU 00800H #DEFINE VDULBL "" #ENDIF ; +#IF (CVDUENABLE) + #DEFINE CVDULBL ", CVDU" +#ELSE + #DEFINE CVDULBL "" +#ENDIF +; +#IF (UPD7220ENABLE) + #DEFINE UPD7220LBL ", UPD7220" +#ELSE + #DEFINE UPD7220LBL "" +#ENDIF +; +#IF (N8VENABLE) + #DEFINE N8VLBL ", N8V" +#ELSE + #DEFINE N8VLBL "" +#ENDIF +; #IF (FDENABLE) #IF (FDMAUTO) #DEFINE FDLBL ", FLOPPY (AUTOSIZE)" diff --git a/branches/wbw/Source/tty.asm b/branches/wbw/Source/tty.asm index cec71c8c..09ece0d4 100644 --- a/branches/wbw/Source/tty.asm +++ b/branches/wbw/Source/tty.asm @@ -134,7 +134,7 @@ TTY_LF: LD E,A ; LINES TO SCROLL -> E LD B,BF_VDASCR CALL EMU_VDADISP ; DO THE SCROLLING - LD A,23 ; ROW 23 + LD A,23 ; ROW 24 LD (TTY_ROW),A ; IS NOW CORRECT JR TTY_XY ; RESPOSITION CURSOR AND RETURN ; diff --git a/branches/wbw/Source/vdu.asm b/branches/wbw/Source/vdu.asm index 3a575f0f..3e285a85 100644 --- a/branches/wbw/Source/vdu.asm +++ b/branches/wbw/Source/vdu.asm @@ -1,10 +1,10 @@ ;__VDUDRIVER_______________________________________________________________________________________ ; -; VDUDRIVER FOR CBIOS 2.2, PAGED. +; VDU DRIVER FOR N8VEM PROJECT ; ; VDU DRIVERS BY: ANDREW LYNCH -; KEYBOARD DRIVERS BY: DR JAMES MOXHAM ; REMAINDER WRITTEN BY: DAN WERNER -- 11/7/2009 +; ROMWBW ADAPTATION BY: WAYNE WARTHEN -- 11/9/2012 ;__________________________________________________________________________________________________ ; ;__________________________________________________________________________________________________