diff --git a/Makefile b/Makefile index d4717ad..7ae5203 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ # Space or comma separated list of cc65 supported target platforms to build for. # Default: c64 (lowercase!) -TARGETS := c64 apple2 +TARGETS := c64 apple2 oric # Name of the final, single-file executable. # Default: name of the current dir with target name appended @@ -61,7 +61,7 @@ POSTEMUCMD := # On Windows machines VICE emulators may not be available in the PATH by default. # In such case, please set the variable below to point to directory containing -# VICE emulators. +# VICE emulators. #VICE_HOME := "C:\Program Files\WinVICE-2.2-x86\" VICE_HOME := diff --git a/Makefile-tap.mk b/Makefile-tap.mk new file mode 100644 index 0000000..df48854 --- /dev/null +++ b/Makefile-tap.mk @@ -0,0 +1,16 @@ +TAP = cc65-Chess.tap + +# Unix or Windows +ifeq ($(shell echo),) + CP = cp $1 +else + CP = copy $(subst /,\,$1) +endif + +REMOVES += $(TAP) + +.PHONY: tap +tap: $(TAP) + +$(TAP): cc65-chess.oric + $(call CP, $< $@) diff --git a/readme.txt b/readme.txt index bc56275..1edbf16 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,7 @@ 0. Updates +May 2020 - [raxiss] created a nice Oric-1/Atmos/Telestrat port. See X below. + Jan 2020 - Oliver Schmidt created a beautiful Apple II port. See IX below. There is a Commodore 64 .PRG and an Apple II .DSK file in the release tab. @@ -28,7 +30,7 @@ The colors here refer to the C64 version. The terminal version has a minimal working display but does try to somewhat match the colors of the C64. The user controls an on-screen cursor. The cursor changes color to indicate -a state. The colors for selection are: +a state. The colors for selection are: Green - the piece can be selected Red - The piece cannot be selected as it doesn't have valid moves Purple - Empty tile or piece on the other side @@ -47,9 +49,9 @@ and down cursor keys to change the selection. While a side is under human control, there are a few more options. Press B to toggle on/off a state showing on every tile how many of both black and white's pieces can attack that tile. Pressing A will toggle a highlight of all of the -pieces on the opposing side that attack the selected tile. Pressing D will +pieces on the opposing side that attack the selected tile. Pressing D will toggle a highlight of all the pieces on the side currently playing's side that -can defend the selected tile. All three of these options basically give a +can defend the selected tile. All three of these options basically give a visual representation of the Attack DB. The colors are: For attackers Cyan and for defenders Red. @@ -274,13 +276,21 @@ all make commands. NOTES: 1) Find AppleCommander here (I used Version 1.5.0): -https://github.com/AppleCommander/AppleCommander/releases +https://github.com/AppleCommander/AppleCommander/releases 2) Set the environment variable (or change the Makefile-dsk.md) to point at the apple commander jar file. Here's how it's done for different shell's: Powershell: $env:AC = "path to apple commander.jar" - cmd.exe + cmd.exe set AC="path to apple commander.jar" bash (Unix or macOS terminal): export AC="path to apple commander.jar" +XI. Oric Build Instructions +To build the Oric-1/Atmos/Telestrat version set the environment variable CC65_HOME +with the path to the base cc65 directory i.e: export CC65_HOME=${HOME}/cc65 + +and use the make command line: +make TARGETS=oric CC65TARGET=atmos OPTIONS=optspeed tap + +This will create a ready to run TAP file: cc65-Chess.tap diff --git a/src/oric/oric.cfg b/src/oric/oric.cfg new file mode 100644 index 0000000..261a46b --- /dev/null +++ b/src/oric/oric.cfg @@ -0,0 +1,45 @@ +SYMBOLS { + __TAPE__: type = import; + __BASHDR__: type = import; + __PROGFLAG__: type = weak, value = $00; # $00=BASIC, $80=machine code + __AUTORUN__: type = weak, value = $C7; # $00=only load, $C7=run + __STACKSIZE__: type = weak, value = $0800; # 2K stack + __GRAB__: type = weak, value = 0; # 0=don't grab graphics RAM, 1=grab graphics RAM + __RAMEND__: type = weak, value = $9900 + $1C00 * __GRAB__; +} +MEMORY { + ZP: file = "", define = yes, start = $00E2, size = $001A; + TAPE: file = %O, type = ro, start = $0000, size = $001F; + BASHEAD: file = %O, define = yes, start = $0501, size = $000D; + MAIN: file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __MAIN_START__; + BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + TAPE: load = TAPE, type = ro; + BASHDR: load = BASHEAD, type = ro, optional = yes; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + INIT: load = MAIN, type = rw; + ONCE: load = MAIN, type = ro, define = yes; + BASTAIL: load = MAIN, type = ro, optional = yes; + BSS: load = BSS, type = bss, define = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/src/oric/platOric.c b/src/oric/platOric.c new file mode 100644 index 0000000..935c536 --- /dev/null +++ b/src/oric/platOric.c @@ -0,0 +1,534 @@ +/* + * platOric.c + * cc65 Chess + * + * Implementation for Oric by [raxiss], May 2020 + * + */ + +#include +#include +#include + +#include "../types.h" +#include "../globals.h" +#include "../undo.h" +#include "../frontend.h" +#include "../plat.h" + +#include "platOric.h" + +#define BOARD_X 1 +#define BOARD_Y 18 + +#define BOARD_PIECE_WIDTH 3 +#define BOARD_PIECE_HEIGHT 22 + +#define CHAR_HEIGHT 8 +#define LOG_WINDOW_HEIGHT 23 + +#define SCREEN_WIDTH 40 +#define SCREEN_HEIGHT 200 + +#define ROP_CPY 0x40 +#define ROP_INV 0xc0 + +/*-----------------------------------------------------------------------*/ +static char moveBuf[7]; + +/*-----------------------------------------------------------------------*/ +extern char hires_CharSet[96][CHAR_HEIGHT]; +extern char hires_Pieces[4*7*BOARD_PIECE_WIDTH*BOARD_PIECE_HEIGHT]; + +/*-----------------------------------------------------------------------*/ +static void clrmenu(void); +static void cputs(char* s); +static void gotoxy(int x, int y); +static void revers(char flag); +static void cprintf(char* fmt, char* s); + +/*-----------------------------------------------------------------------*/ +#define peek(addr) ((unsigned char*)addr)[0] +#define poke(addr, val) {((unsigned char*)addr)[0] = val;} +#define deek(addr) ((unsigned int*)addr)[0] +#define doke(addr, val) {((unsigned int*)addr)[0] = val;} +#define unused(x) (void)(x) +/*-----------------------------------------------------------------------*/ +// Names of the pieces NONE, Rook, knight, Bishop, Queen, King, pawn +// static const char sc_pieces[] = {'\0','R','k','B','Q','K','p'}; + +/*-----------------------------------------------------------------------*/ +void plat_Init(void) +{ + char i; + unsigned int n; + + setup(); + clrmenu(); + + // Show credits and wait for key press + plat_DrawString(2,SCREEN_HEIGHT/2-10-CHAR_HEIGHT/2, + ROP_CPY,gszAbout); + plat_DrawString(1,SCREEN_HEIGHT/2+10-CHAR_HEIGHT/2, + ROP_CPY,"Oric-1/Atmos version by [raxiss], 2020."); + + n = 0*2*7*BOARD_PIECE_HEIGHT + 0*7*BOARD_PIECE_HEIGHT + (KING-1); + hires_Draw(SCREEN_WIDTH/2-2,SCREEN_HEIGHT/2-50-BOARD_PIECE_HEIGHT/2, + BOARD_PIECE_WIDTH,BOARD_PIECE_HEIGHT,ROP_CPY, + &hires_Pieces[n*BOARD_PIECE_WIDTH]); + + n = 1*2*7*BOARD_PIECE_HEIGHT + 0*7*BOARD_PIECE_HEIGHT + (KING-1); + hires_Draw(SCREEN_WIDTH/2-2,SCREEN_HEIGHT/2+50-BOARD_PIECE_HEIGHT/2, + BOARD_PIECE_WIDTH,BOARD_PIECE_HEIGHT,ROP_CPY, + &hires_Pieces[n*BOARD_PIECE_WIDTH]); + + plat_ReadKeys(1); + + hires(); + // Draw the board border and + // add the A..H and 1..8 tile-keys + for(i=0; i<8; ++i) + { + for(n=0; n 2) + i -= 2; + else + i = j-1-(i-1)%2; + break; + + case INPUT_DOWN: + if(i < j-2) + i += 2; + else + i = 1+(i-1)%2; + break; + } + } + keyMask &= (INPUT_SELECT | INPUT_BACKUP); + + } while(keyMask != INPUT_SELECT && keyMask != INPUT_BACKUP); + + clrmenu(); + + // If backing out of the menu, return 0 + if(keyMask & INPUT_BACKUP) + return 0; + + // Return the selection + return i; +} + +/*-----------------------------------------------------------------------*/ +extern char hires_xpos; +extern char hires_ypos; +extern char hires_xsize; +extern char hires_ysize; +extern char hires_rop; +extern char hires_clr; +extern char* hires_src; +void hires_MaskA(void); +void hires_DrawA(void); +void hires_DrawCharA(void); +void hires_DrawClrA(void); +void hires_SelectA(void); + +/*-----------------------------------------------------------------------*/ +void hires_Mask(char xpos, char ypos, char xsize, char ysize, char rop) +{ + hires_xpos = xpos; + hires_ypos = ypos; + hires_xsize = xsize; + hires_ysize = ysize; + hires_rop = rop; + hires_MaskA(); +} + +/*-----------------------------------------------------------------------*/ +void hires_Draw(char xpos, char ypos, char xsize, char ysize, char rop, char *src) +{ + hires_xpos = xpos; + hires_ypos = ypos; + hires_xsize = xsize; + hires_ysize = ysize; + hires_rop = rop; + hires_src = src; + hires_DrawA(); +} + +/*-----------------------------------------------------------------------*/ +void hires_DrawClr(char xpos, char ypos, char clr) +{ + hires_xpos = xpos; + hires_ypos = ypos; + hires_clr = clr; + hires_DrawClrA(); +} + +/*-----------------------------------------------------------------------*/ +void hires_Select(char xpos, char ypos, char xsize, char ysize, char rop, char *src) +{ + hires_xpos = xpos; + hires_ypos = ypos; + hires_xsize = xsize; + hires_ysize = ysize; + hires_rop = rop; + hires_src = src; + hires_SelectA(); +} + +/*-----------------------------------------------------------------------*/ +void plat_DrawChar(char xpos, char ypos, char rop, char c) +{ + hires_xpos = xpos; + hires_ypos = ypos; + hires_rop = rop; + hires_src = hires_CharSet[c-' ']; + hires_DrawCharA(); +} + +/*-----------------------------------------------------------------------*/ +void plat_DrawString(char x, char y, char rop, char *s) +{ + while(*s) + plat_DrawChar(x++,y, rop, *s++); +} + +/*-----------------------------------------------------------------------*/ +void plat_UpdateScreen(void) +{ + memset(moveBuf,0x20,6); moveBuf[6] = 0; + plat_DrawString(SCREEN_WIDTH-6,(LOG_WINDOW_HEIGHT+1)*CHAR_HEIGHT, + ROP_CPY,moveBuf); + + /* + switch(gOutcome) + { + case OUTCOME_INVALID: + case OUTCOME_OK: + case OUTCOME_CHECK: + case OUTCOME_CHECKMATE: + case OUTCOME_DRAW: + case OUTCOME_STALEMATE: + case OUTCOME_MENU: + case OUTCOME_ABANDON: + case OUTCOME_QUIT: + break; + } + */ +} + +/*-----------------------------------------------------------------------*/ +void plat_DrawBoard(char clearLog) +{ + int i; + + if(clearLog) + hires_Mask(27,0,SCREEN_WIDTH-27,SCREEN_HEIGHT,ROP_CPY); + + // Redraw all tiles + for(i=0; i<64; ++i) + plat_DrawSquare(i); +} + +/*-----------------------------------------------------------------------*/ +void plat_DrawSquare(char position) +{ + char y = position / 8, x = position & 7; + char piece = gChessBoard[y][x]; + char blackWhite = !((x & 1) ^ (y & 1)); + char pieceBlackWhite = !(piece & PIECE_WHITE); + + unsigned int idx = blackWhite*7*BOARD_PIECE_HEIGHT + (piece&PIECE_DATA); + + if(piece) idx += pieceBlackWhite*2*7*BOARD_PIECE_HEIGHT; + + hires_Draw(BOARD_X+x*BOARD_PIECE_WIDTH,BOARD_Y+y*BOARD_PIECE_HEIGHT, + BOARD_PIECE_WIDTH,BOARD_PIECE_HEIGHT,ROP_CPY, + &hires_Pieces[idx*BOARD_PIECE_WIDTH]); + + // Show the attack numbers + if(gShowAttackBoard) + { + char val[4]; + char rop = blackWhite ? ROP_INV : ROP_CPY; + + sprintf(val,"%02X%d",gChessBoard[y][x],(gChessBoard[y][x]&PIECE_WHITE)>>7); + + plat_DrawChar(BOARD_X+x*BOARD_PIECE_WIDTH,BOARD_Y+(y+1)*BOARD_PIECE_HEIGHT-CHAR_HEIGHT, + rop,(gpAttackBoard[giAttackBoardOffset[position][0]])+'0'); + plat_DrawChar(BOARD_X+(x+1)*BOARD_PIECE_WIDTH-1,BOARD_Y+(y+1)*BOARD_PIECE_HEIGHT-CHAR_HEIGHT, + rop,(gpAttackBoard[giAttackBoardOffset[position][1]])+'0'); + plat_DrawString(BOARD_X+x*BOARD_PIECE_WIDTH,BOARD_Y+y*BOARD_PIECE_HEIGHT,rop,val); + } +} + +/*-----------------------------------------------------------------------*/ +void plat_ShowSideToGoLabel(char side) +{ + plat_DrawString(28,SCREEN_HEIGHT-CHAR_HEIGHT, + side?ROP_CPY:ROP_INV,gszSideLabel[side]); +} + +/*-----------------------------------------------------------------------*/ +void plat_Highlight(char position, char color, char cursor) +{ + char y = position / 8, x = position & 7; + char sel = color == HCOLOR_ATTACK? 3:2; + + memset(moveBuf,0x20,6); moveBuf[6] = 0; + moveBuf[0] = 'A' + (gTile[0] & 7); + moveBuf[1] = '8' - (gTile[0] / 8); + + switch(color) + { + case HCOLOR_INVALID: // 2 + case HCOLOR_EMPTY: // 4 + hires_DrawClr(SCREEN_WIDTH-6-1,(LOG_WINDOW_HEIGHT+1)*CHAR_HEIGHT,1); + moveBuf[2] = 0; + break; + case HCOLOR_ATTACK: // 3 + hires_DrawClr(SCREEN_WIDTH-6-1,(LOG_WINDOW_HEIGHT+1)*CHAR_HEIGHT,2); + moveBuf[2] = (gPiece[1] & PIECE_DATA) != NONE ? 'x' : '-'; + moveBuf[3] = 'A' + (gTile[1] & 7); + moveBuf[4] = '8' - (gTile[1] / 8); + break; + case HCOLOR_VALID: // 5 + hires_DrawClr(SCREEN_WIDTH-6-1,(LOG_WINDOW_HEIGHT+1)*CHAR_HEIGHT,2); + moveBuf[2] = 0; + break; + case HCOLOR_SELECTED: // 6 + moveBuf[2] = (gPiece[1] & PIECE_DATA) != NONE ? 'x' : '-'; + moveBuf[3] = 'A' + (gTile[1] & 7); + moveBuf[4] = '8' - (gTile[1] / 8); + break; + } + + plat_DrawString(SCREEN_WIDTH-6,(LOG_WINDOW_HEIGHT+1)*CHAR_HEIGHT, + color?ROP_CPY:ROP_INV,moveBuf); + + plat_DrawSquare(position); + hires_Select(BOARD_X+x*BOARD_PIECE_WIDTH,BOARD_Y+y*BOARD_PIECE_HEIGHT, + BOARD_PIECE_WIDTH,BOARD_PIECE_HEIGHT,ROP_CPY, + &hires_Pieces[sel*7*BOARD_PIECE_HEIGHT*BOARD_PIECE_WIDTH]); + + unused(cursor); // silence compiler +} +/*-----------------------------------------------------------------------*/ +void plat_ShowMessage(char *str, char color) +{ + plat_DrawString(26,0,ROP_CPY,str); + unused(color); // silence compiler +} +/*-----------------------------------------------------------------------*/ +void plat_ClearMessage(void) +{ + hires_Mask(26,0,7,CHAR_HEIGHT,ROP_CPY); +} +/*-----------------------------------------------------------------------*/ +void plat_AddToLogWin(void) +{ + char y; + + for(y=0; y<=LOG_WINDOW_HEIGHT; ++y) + { + hires_Mask(SCREEN_WIDTH-6,y*CHAR_HEIGHT, + 6,CHAR_HEIGHT,ROP_CPY); + + if(undo_FindUndoLine(LOG_WINDOW_HEIGHT-y)) + { + frontend_FormatLogString(); + // force 2 empty lines + if(1hires_atmos + sta _hires+2 + lda #getkey_atmos + sta _getkey+2 + jmp _hires + +isOric1: lda #hires_oric1 + sta _hires+2 + lda #getkey_oric1 + sta _getkey+2 + +; ---------------------------------------------------------------------- +_hires: jsr $f00d + lda #$08 + sta $26a + rts + +; ---------------------------------------------------------------------- +_quit: lda rst + sta l00_aptr+1 + lda rst+1 + sta l00_aptr+2 + sei +l00_aptr: jmp $dead + +; ---------------------------------------------------------------------- +_getkey: jsr $f00d + and #$7f + beq test + cmp #$0d +test: + ldx #$00 + rts + +; ====================================================================== +_hires_xpos: .byte 0 +_hires_ypos: .byte 0 +_hires_xsize: .byte 0 +_hires_ysize: .byte 0 +_hires_rop: .byte 0 +_hires_clr: .byte 0 +_hires_src: .word 0 + +; ---------------------------------------------------------------------- +_hires_MaskA: + clc + ldx _hires_ypos + lda _scrnlo,x + adc _hires_xpos + sta l01_adst+1 + lda _scrnhi,x + adc #0 + sta l01_adst+2 +l01_loop: ldx #0 + lda _hires_rop +l01_adst: sta $f00d,x + inx + cpx _hires_xsize + bne l01_adst + clc + lda l01_adst+1 + adc #40 + sta l01_adst+1 + lda l01_adst+2 + adc #0 + sta l01_adst+2 + dec _hires_ysize + bne l01_loop + rts + +; ---------------------------------------------------------------------- +_hires_DrawA: + lda _hires_src + sta l02_asrc+1 + lda _hires_src+1 + sta l02_asrc+2 + + clc + ldx _hires_ypos + lda _scrnlo,x + adc _hires_xpos + sta l02_adst+1 + lda _scrnhi,x + adc #0 + sta l02_adst+2 + + ldy _hires_ysize +l02_loop: ldx #0 +l02_asrc: lda $f00d,x + ora _hires_rop +l02_adst: sta $f00d,x + inx + cpx _hires_xsize + bne l02_asrc + + clc + lda #<3*7 + adc l02_asrc+1 + sta l02_asrc+1 + lda #>3*7 + adc l02_asrc+2 + sta l02_asrc+2 + + clc + lda #<40 + adc l02_adst+1 + sta l02_adst+1 + lda #>40 + adc l02_adst+2 + sta l02_adst+2 + + dey + bne l02_loop + + rts + +; ---------------------------------------------------------------------- +_hires_SelectA: + lda _hires_src + sta l03_asrc+1 + lda _hires_src+1 + sta l03_asrc+2 + + clc + ldx _hires_ypos + lda _scrnlo,x + adc _hires_xpos + sta l03_adst+1 + sta l03_arop+1 + lda _scrnhi,x + adc #0 + sta l03_adst+2 + sta l03_arop+2 + + ldy _hires_ysize +l03_loop: ldx #0 +l03_asrc: lda $f00d,x +l03_arop: eor $f00d,x + ora #$40 +l03_adst: sta $f00d,x + inx + cpx _hires_xsize + bne l03_asrc + + clc + lda #<3*7 + adc l03_asrc+1 + sta l03_asrc+1 + lda #>3*7 + adc l03_asrc+2 + sta l03_asrc+2 + + clc + lda #<40 + adc l03_adst+1 + sta l03_adst+1 + sta l03_arop+1 + lda #>40 + adc l03_adst+2 + sta l03_adst+2 + sta l03_arop+2 + + dey + bne l03_loop + + rts + + +; ---------------------------------------------------------------------- +_hires_DrawCharA: + lda _hires_src + sta l04_asrc+1 + lda _hires_src+1 + sta l04_asrc+2 + + clc + ldx _hires_ypos + lda _scrnlo,x + adc _hires_xpos + sta l04_adst+1 + lda _scrnhi,x + adc #0 + sta l04_adst+2 + + ldx #0 +l04_loop: +l04_asrc: lda $f00d,x + ora _hires_rop +l04_adst: sta $f00d + + clc + lda #<40 + adc l04_adst+1 + sta l04_adst+1 + lda #>40 + adc l04_adst+2 + sta l04_adst+2 + + inx + cpx #8 + bne l04_loop + + rts + +; ---------------------------------------------------------------------- +_hires_DrawClrA: + clc + ldx _hires_ypos + lda _scrnlo,x + adc _hires_xpos + sta l05_adst+1 + lda _scrnhi,x + adc #0 + sta l05_adst+2 + + ldx #8 +l05_loop: lda _hires_clr +l05_adst: sta $f00d + + clc + lda #<40 + adc l05_adst+1 + sta l05_adst+1 + lda #>40 + adc l05_adst+2 + sta l05_adst+2 + + dex + bne l05_loop + + rts + +; ---------------------------------------------------------------------- +_hires_CharSet = $9900 + +; ---------------------------------------------------------------------- +_hires_Pieces: +_pieces: + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4e,$5c,$58 + .byte $40,$58,$40,$40,$4c,$40,$40,$4c,$40,$40,$4c,$40,$40,$40,$40,$40 + .byte $40,$40,$4e,$5c,$68,$40,$5c,$40,$40,$4c,$40,$40,$61,$40,$40,$56 + .byte $40,$40,$40,$40,$40,$40,$40,$4f,$77,$50,$41,$7e,$40,$40,$5a,$40 + .byte $41,$7e,$60,$40,$4c,$40,$40,$4c,$40,$40,$40,$40,$47,$6a,$68,$43 + .byte $77,$40,$40,$7d,$40,$41,$7d,$40,$41,$6d,$60,$40,$5e,$40,$40,$40 + .byte $40,$47,$7f,$50,$47,$7f,$40,$40,$7a,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$5e,$40,$40,$40,$40,$43,$7e,$60,$47,$7f,$60,$40,$7f,$40,$41 + .byte $7e,$60,$41,$7e,$60,$40,$40,$40,$40,$40,$40,$41,$7f,$40,$47,$7f + .byte $60,$40,$40,$40,$41,$7d,$40,$41,$7d,$40,$41,$7f,$60,$40,$40,$40 + .byte $41,$7f,$40,$40,$4f,$60,$41,$7f,$60,$40,$7e,$60,$40,$7e,$60,$40 + .byte $40,$40,$40,$40,$40,$41,$7b,$40,$40,$4f,$40,$40,$7f,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$5e,$40,$40,$40,$40,$41,$7d,$40,$40,$4e,$60 + .byte $40,$40,$40,$40,$5e,$40,$40,$5e,$40,$40,$5e,$40,$40,$40,$40,$41 + .byte $7a,$40,$40,$5f,$50,$40,$5e,$40,$40,$5e,$40,$40,$7f,$40,$40,$5a + .byte $40,$40,$40,$40,$41,$75,$40,$40,$7e,$60,$40,$5e,$40,$40,$7f,$40 + .byte $40,$7f,$40,$40,$7d,$40,$40,$40,$40,$41,$7a,$40,$40,$7d,$50,$40 + .byte $7f,$40,$40,$7f,$40,$41,$7d,$60,$41,$7a,$60,$40,$40,$40,$41,$75 + .byte $40,$40,$7a,$60,$41,$7e,$60,$41,$7e,$60,$41,$7e,$60,$41,$75,$40 + .byte $40,$40,$40,$40,$40,$40,$43,$7d,$50,$43,$7f,$50,$43,$7d,$50,$43 + .byte $7d,$50,$40,$40,$40,$40,$40,$40,$47,$7f,$50,$40,$40,$40,$47,$7e + .byte $68,$47,$7e,$68,$47,$7e,$68,$47,$7f,$68,$40,$40,$40,$4f,$7e,$68 + .byte $47,$7f,$68,$4f,$7d,$54,$4f,$7d,$54,$4f,$7d,$54,$4f,$7f,$54,$40 + .byte $40,$40,$4f,$7d,$58,$4f,$7f,$54,$4f,$7e,$68,$4f,$7a,$68,$4f,$7a + .byte $68,$4f,$7e,$68,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$7f,$7f + .byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f + .byte $7f,$7f,$7f,$7f,$7f,$7f,$60,$40,$43,$7f,$43,$7f,$7f,$61,$7f,$7f + .byte $61,$7f,$7f,$61,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$6e,$5c,$5b,$7f,$59 + .byte $7f,$7f,$6d,$7f,$7e,$4c,$5f,$7f,$4c,$7f,$7f,$7f,$7f,$7f,$7f,$7f + .byte $6e,$5c,$6b,$7c,$5c,$7f,$7f,$4c,$7f,$7c,$61,$4f,$7f,$56,$7f,$7f + .byte $61,$7f,$7f,$7f,$7f,$6f,$77,$53,$79,$7e,$5f,$7e,$5a,$5f,$7d,$7e + .byte $6f,$7c,$4c,$4f,$7f,$4c,$7f,$7f,$7f,$7f,$67,$6a,$6b,$73,$77,$5f + .byte $7e,$7d,$5f,$7d,$7d,$4f,$7d,$6d,$6f,$7f,$5e,$7f,$7f,$7f,$7f,$77 + .byte $7f,$53,$77,$7f,$4f,$7e,$7a,$5f,$7c,$40,$4f,$7c,$40,$4f,$7f,$5e + .byte $7f,$7f,$7f,$7f,$73,$7e,$67,$77,$7f,$6f,$7e,$7f,$5f,$7d,$7e,$6f + .byte $7d,$7f,$6f,$7c,$40,$4f,$7f,$7f,$7f,$79,$7f,$4f,$77,$7f,$6f,$7c + .byte $40,$4f,$7d,$7d,$4f,$7d,$7f,$4f,$7d,$7f,$6f,$7f,$7f,$7f,$7d,$7f + .byte $5f,$70,$4f,$6f,$7d,$7f,$6f,$7c,$7e,$6f,$7e,$7e,$5f,$7c,$40,$4f + .byte $7f,$7f,$7f,$7d,$7b,$5f,$7f,$6f,$4f,$7c,$7f,$4f,$7e,$40,$4f,$7f + .byte $40,$7f,$7f,$5e,$7f,$7f,$7f,$7f,$7d,$7d,$5f,$7f,$4e,$67,$7e,$40 + .byte $5f,$7f,$5e,$7f,$7e,$5e,$5f,$7f,$5e,$7f,$7f,$7f,$7f,$7d,$7a,$5f + .byte $7e,$5f,$57,$7f,$5e,$7f,$7e,$5e,$5f,$7e,$7f,$5f,$7e,$5a,$5f,$7f + .byte $7f,$7f,$7d,$75,$5f,$7e,$7e,$67,$7e,$5e,$5f,$7e,$7f,$5f,$7c,$7f + .byte $4f,$7c,$7d,$4f,$7f,$7f,$7f,$7d,$7a,$5f,$7e,$7d,$57,$7c,$7f,$4f + .byte $7c,$7f,$4f,$7d,$7f,$6f,$7d,$7a,$6f,$7f,$7f,$7f,$7d,$75,$5f,$78 + .byte $7a,$67,$79,$7e,$67,$79,$7e,$67,$79,$7e,$67,$7d,$75,$4f,$7f,$7f + .byte $7f,$70,$40,$47,$7b,$7d,$5f,$73,$7f,$53,$73,$7d,$53,$73,$7d,$53 + .byte $70,$40,$43,$7f,$7f,$7f,$67,$7f,$53,$70,$40,$43,$67,$7e,$69,$67 + .byte $7e,$69,$67,$7e,$69,$67,$7f,$69,$7f,$7f,$7f,$6f,$7e,$6b,$67,$7f + .byte $69,$6f,$7d,$55,$6f,$7d,$55,$6f,$7d,$55,$6f,$7f,$55,$7f,$7f,$7f + .byte $6f,$7d,$53,$6f,$7f,$55,$6f,$7e,$69,$6f,$7a,$69,$6f,$7a,$69,$6f + .byte $7e,$69,$7f,$7f,$7f,$60,$40,$43,$60,$40,$41,$60,$40,$41,$60,$40 + .byte $41,$60,$40,$41,$60,$40,$41,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f + .byte $7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$7f,$6a,$6a,$6a,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$50,$40,$41,$5f,$7f,$7c,$40,$7c,$40,$40,$5e,$40,$40,$5e,$40 + .byte $40,$5e,$40,$40,$40,$40,$60,$40,$42,$51,$63,$44,$40,$66,$40,$40 + .byte $52,$40,$41,$73,$60,$40,$73,$40,$40,$40,$40,$50,$40,$41,$51,$63 + .byte $44,$43,$63,$40,$40,$73,$40,$43,$5e,$70,$40,$69,$40,$40,$5e,$40 + .byte $60,$40,$42,$50,$48,$4c,$46,$41,$60,$41,$60,$60,$42,$61,$50,$43 + .byte $73,$70,$40,$73,$40,$50,$40,$41,$58,$54,$54,$4c,$48,$60,$41,$42 + .byte $60,$42,$40,$70,$42,$52,$50,$40,$69,$40,$60,$40,$42,$48,$40,$6c + .byte $48,$40,$70,$41,$44,$60,$41,$7f,$60,$41,$7f,$60,$40,$61,$40,$50 + .byte $40,$41,$4c,$41,$58,$48,$40,$50,$41,$40,$60,$42,$40,$50,$42,$40 + .byte $50,$43,$7f,$70,$60,$40,$42,$46,$40,$70,$48,$40,$50,$43,$7f,$70 + .byte $42,$40,$70,$42,$40,$70,$42,$40,$50,$50,$40,$41,$42,$40,$60,$4f + .byte $70,$50,$42,$40,$50,$43,$41,$50,$41,$41,$60,$43,$7f,$70,$60,$40 + .byte $42,$42,$40,$60,$40,$50,$70,$43,$40,$70,$41,$7f,$60,$40,$7f,$40 + .byte $40,$61,$40,$50,$40,$41,$42,$42,$60,$40,$71,$58,$41,$7f,$60,$40 + .byte $61,$40,$41,$61,$60,$40,$61,$40,$60,$40,$42,$42,$44,$60,$41,$60 + .byte $68,$40,$61,$40,$41,$61,$60,$41,$40,$60,$41,$61,$60,$50,$40,$41 + .byte $42,$4a,$60,$41,$41,$58,$41,$61,$60,$41,$40,$60,$43,$40,$70,$43 + .byte $40,$70,$60,$40,$42,$42,$45,$60,$41,$42,$68,$43,$40,$70,$43,$40 + .byte $70,$42,$40,$50,$42,$41,$50,$50,$40,$41,$42,$4a,$60,$47,$45,$58 + .byte $46,$41,$58,$46,$41,$58,$46,$41,$58,$42,$42,$70,$60,$40,$42,$4f + .byte $7f,$78,$44,$42,$60,$4c,$40,$6c,$4c,$42,$6c,$4c,$42,$6c,$4f,$7f + .byte $7c,$50,$40,$41,$58,$40,$6c,$4f,$7f,$7c,$58,$41,$56,$58,$41,$56 + .byte $58,$41,$56,$58,$40,$56,$60,$40,$42,$50,$41,$54,$58,$40,$56,$50 + .byte $42,$6a,$50,$42,$6a,$50,$42,$6a,$50,$40,$6a,$50,$40,$41,$50,$42 + .byte $6c,$50,$40,$6a,$50,$41,$56,$50,$45,$56,$50,$45,$56,$50,$41,$56 + .byte $60,$40,$42,$5f,$7f,$7c,$5f,$7f,$7e,$5f,$7f,$7e,$5f,$7f,$7e,$5f + .byte $7f,$7e,$5f,$7f,$7e,$55,$55,$55,$40,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$6a,$6a,$6a,$40,$40,$41 + .byte $7f,$43,$7f,$7f,$61,$7f,$7f,$61,$7f,$7f,$61,$7f,$7f,$7f,$7f,$40 + .byte $40,$41,$5f,$7f,$7d,$7e,$7c,$7f,$7f,$5e,$7f,$7c,$5e,$4f,$7e,$5e + .byte $5f,$7f,$7f,$7f,$60,$40,$40,$51,$63,$45,$78,$66,$5f,$7e,$52,$5f + .byte $79,$73,$67,$7e,$73,$5f,$7f,$40,$7f,$40,$40,$41,$51,$63,$45,$73 + .byte $63,$4f,$7c,$73,$4f,$7b,$5e,$77,$78,$69,$47,$7e,$5e,$5f,$60,$40 + .byte $40,$50,$48,$4d,$66,$41,$6f,$7d,$60,$6f,$7a,$61,$57,$7b,$73,$77 + .byte $7e,$73,$5f,$40,$40,$41,$58,$54,$55,$6c,$48,$67,$7d,$42,$6f,$7a + .byte $40,$77,$7a,$52,$57,$7e,$69,$5f,$60,$40,$40,$48,$40,$6d,$68,$40 + .byte $77,$7d,$44,$6f,$79,$7f,$67,$79,$7f,$67,$78,$61,$47,$40,$40,$41 + .byte $6c,$41,$59,$68,$40,$57,$79,$40,$67,$7a,$40,$57,$7a,$40,$57,$7b + .byte $7f,$77,$60,$40,$40,$66,$40,$73,$68,$40,$57,$7b,$7f,$77,$7a,$40 + .byte $77,$7a,$40,$77,$7a,$40,$57,$40,$40,$41,$72,$40,$67,$6f,$70,$57 + .byte $7a,$40,$57,$7b,$41,$57,$7d,$41,$67,$7b,$7f,$77,$60,$40,$40,$7a + .byte $40,$6f,$60,$50,$73,$7b,$40,$77,$79,$7f,$67,$7c,$7f,$4f,$78,$61 + .byte $47,$40,$40,$41,$7a,$42,$6f,$7c,$71,$5b,$79,$7f,$67,$7c,$61,$4f + .byte $7d,$61,$6f,$7c,$61,$4f,$60,$40,$40,$7a,$44,$6f,$7d,$60,$6b,$7c + .byte $61,$4f,$7d,$61,$6f,$79,$40,$67,$79,$61,$67,$40,$40,$41,$7a,$4a + .byte $6f,$7d,$41,$5b,$79,$61,$67,$79,$40,$67,$7b,$40,$77,$7b,$40,$77 + .byte $60,$40,$40,$7a,$45,$6f,$71,$42,$6b,$73,$40,$73,$73,$40,$73,$72 + .byte $40,$53,$7a,$41,$57,$40,$40,$41,$62,$4a,$63,$77,$45,$5b,$66,$41 + .byte $59,$66,$41,$59,$66,$41,$59,$62,$42,$71,$60,$40,$40,$4f,$7f,$79 + .byte $64,$42,$61,$4c,$40,$6c,$4c,$42,$6c,$4c,$42,$6c,$4f,$7f,$7c,$40 + .byte $40,$41,$58,$40,$6d,$4f,$7f,$7c,$58,$41,$56,$58,$41,$56,$58,$41 + .byte $56,$58,$40,$56,$60,$40,$40,$50,$41,$55,$58,$40,$56,$50,$42,$6a + .byte $50,$42,$6a,$50,$42,$6a,$50,$40,$6a,$40,$40,$41,$50,$42,$6d,$50 + .byte $40,$6a,$50,$41,$56,$50,$45,$56,$50,$45,$56,$50,$41,$56,$60,$40 + .byte $40,$5f,$7f,$7d,$5f,$7f,$7e,$5f,$7f,$7e,$5f,$7f,$7e,$5f,$7f,$7e + .byte $5f,$7f,$7e,$55,$55,$55,$40,$40,$41,$40,$40,$40,$40,$40,$40,$40 + .byte $40,$40,$40,$40,$40,$40,$40,$40 + +_scrnlo: + .byte <($a000+( 0*40)) + .byte <($a000+( 1*40)) + .byte <($a000+( 2*40)) + .byte <($a000+( 3*40)) + .byte <($a000+( 4*40)) + .byte <($a000+( 5*40)) + .byte <($a000+( 6*40)) + .byte <($a000+( 7*40)) + .byte <($a000+( 8*40)) + .byte <($a000+( 9*40)) + .byte <($a000+( 10*40)) + .byte <($a000+( 11*40)) + .byte <($a000+( 12*40)) + .byte <($a000+( 13*40)) + .byte <($a000+( 14*40)) + .byte <($a000+( 15*40)) + .byte <($a000+( 16*40)) + .byte <($a000+( 17*40)) + .byte <($a000+( 18*40)) + .byte <($a000+( 19*40)) + .byte <($a000+( 20*40)) + .byte <($a000+( 21*40)) + .byte <($a000+( 22*40)) + .byte <($a000+( 23*40)) + .byte <($a000+( 24*40)) + .byte <($a000+( 25*40)) + .byte <($a000+( 26*40)) + .byte <($a000+( 27*40)) + .byte <($a000+( 28*40)) + .byte <($a000+( 29*40)) + .byte <($a000+( 30*40)) + .byte <($a000+( 31*40)) + .byte <($a000+( 32*40)) + .byte <($a000+( 33*40)) + .byte <($a000+( 34*40)) + .byte <($a000+( 35*40)) + .byte <($a000+( 36*40)) + .byte <($a000+( 37*40)) + .byte <($a000+( 38*40)) + .byte <($a000+( 39*40)) + .byte <($a000+( 40*40)) + .byte <($a000+( 41*40)) + .byte <($a000+( 42*40)) + .byte <($a000+( 43*40)) + .byte <($a000+( 44*40)) + .byte <($a000+( 45*40)) + .byte <($a000+( 46*40)) + .byte <($a000+( 47*40)) + .byte <($a000+( 48*40)) + .byte <($a000+( 49*40)) + .byte <($a000+( 50*40)) + .byte <($a000+( 51*40)) + .byte <($a000+( 52*40)) + .byte <($a000+( 53*40)) + .byte <($a000+( 54*40)) + .byte <($a000+( 55*40)) + .byte <($a000+( 56*40)) + .byte <($a000+( 57*40)) + .byte <($a000+( 58*40)) + .byte <($a000+( 59*40)) + .byte <($a000+( 60*40)) + .byte <($a000+( 61*40)) + .byte <($a000+( 62*40)) + .byte <($a000+( 63*40)) + .byte <($a000+( 64*40)) + .byte <($a000+( 65*40)) + .byte <($a000+( 66*40)) + .byte <($a000+( 67*40)) + .byte <($a000+( 68*40)) + .byte <($a000+( 69*40)) + .byte <($a000+( 70*40)) + .byte <($a000+( 71*40)) + .byte <($a000+( 72*40)) + .byte <($a000+( 73*40)) + .byte <($a000+( 74*40)) + .byte <($a000+( 75*40)) + .byte <($a000+( 76*40)) + .byte <($a000+( 77*40)) + .byte <($a000+( 78*40)) + .byte <($a000+( 79*40)) + .byte <($a000+( 80*40)) + .byte <($a000+( 81*40)) + .byte <($a000+( 82*40)) + .byte <($a000+( 83*40)) + .byte <($a000+( 84*40)) + .byte <($a000+( 85*40)) + .byte <($a000+( 86*40)) + .byte <($a000+( 87*40)) + .byte <($a000+( 88*40)) + .byte <($a000+( 89*40)) + .byte <($a000+( 90*40)) + .byte <($a000+( 91*40)) + .byte <($a000+( 92*40)) + .byte <($a000+( 93*40)) + .byte <($a000+( 94*40)) + .byte <($a000+( 95*40)) + .byte <($a000+( 96*40)) + .byte <($a000+( 97*40)) + .byte <($a000+( 98*40)) + .byte <($a000+( 99*40)) + .byte <($a000+(100*40)) + .byte <($a000+(101*40)) + .byte <($a000+(102*40)) + .byte <($a000+(103*40)) + .byte <($a000+(104*40)) + .byte <($a000+(105*40)) + .byte <($a000+(106*40)) + .byte <($a000+(107*40)) + .byte <($a000+(108*40)) + .byte <($a000+(109*40)) + .byte <($a000+(110*40)) + .byte <($a000+(111*40)) + .byte <($a000+(112*40)) + .byte <($a000+(113*40)) + .byte <($a000+(114*40)) + .byte <($a000+(115*40)) + .byte <($a000+(116*40)) + .byte <($a000+(117*40)) + .byte <($a000+(118*40)) + .byte <($a000+(119*40)) + .byte <($a000+(120*40)) + .byte <($a000+(121*40)) + .byte <($a000+(122*40)) + .byte <($a000+(123*40)) + .byte <($a000+(124*40)) + .byte <($a000+(125*40)) + .byte <($a000+(126*40)) + .byte <($a000+(127*40)) + .byte <($a000+(128*40)) + .byte <($a000+(129*40)) + .byte <($a000+(130*40)) + .byte <($a000+(131*40)) + .byte <($a000+(132*40)) + .byte <($a000+(133*40)) + .byte <($a000+(134*40)) + .byte <($a000+(135*40)) + .byte <($a000+(136*40)) + .byte <($a000+(137*40)) + .byte <($a000+(138*40)) + .byte <($a000+(139*40)) + .byte <($a000+(140*40)) + .byte <($a000+(141*40)) + .byte <($a000+(142*40)) + .byte <($a000+(143*40)) + .byte <($a000+(144*40)) + .byte <($a000+(145*40)) + .byte <($a000+(146*40)) + .byte <($a000+(147*40)) + .byte <($a000+(148*40)) + .byte <($a000+(149*40)) + .byte <($a000+(150*40)) + .byte <($a000+(151*40)) + .byte <($a000+(152*40)) + .byte <($a000+(153*40)) + .byte <($a000+(154*40)) + .byte <($a000+(155*40)) + .byte <($a000+(156*40)) + .byte <($a000+(157*40)) + .byte <($a000+(158*40)) + .byte <($a000+(159*40)) + .byte <($a000+(160*40)) + .byte <($a000+(161*40)) + .byte <($a000+(162*40)) + .byte <($a000+(163*40)) + .byte <($a000+(164*40)) + .byte <($a000+(165*40)) + .byte <($a000+(166*40)) + .byte <($a000+(167*40)) + .byte <($a000+(168*40)) + .byte <($a000+(169*40)) + .byte <($a000+(170*40)) + .byte <($a000+(171*40)) + .byte <($a000+(172*40)) + .byte <($a000+(173*40)) + .byte <($a000+(174*40)) + .byte <($a000+(175*40)) + .byte <($a000+(176*40)) + .byte <($a000+(177*40)) + .byte <($a000+(178*40)) + .byte <($a000+(179*40)) + .byte <($a000+(180*40)) + .byte <($a000+(181*40)) + .byte <($a000+(182*40)) + .byte <($a000+(183*40)) + .byte <($a000+(184*40)) + .byte <($a000+(185*40)) + .byte <($a000+(186*40)) + .byte <($a000+(187*40)) + .byte <($a000+(188*40)) + .byte <($a000+(189*40)) + .byte <($a000+(190*40)) + .byte <($a000+(191*40)) + .byte <($a000+(192*40)) + .byte <($a000+(193*40)) + .byte <($a000+(194*40)) + .byte <($a000+(195*40)) + .byte <($a000+(196*40)) + .byte <($a000+(197*40)) + .byte <($a000+(198*40)) + .byte <($a000+(199*40)) + +_scrnhi: + .byte >($a000+( 0*40)) + .byte >($a000+( 1*40)) + .byte >($a000+( 2*40)) + .byte >($a000+( 3*40)) + .byte >($a000+( 4*40)) + .byte >($a000+( 5*40)) + .byte >($a000+( 6*40)) + .byte >($a000+( 7*40)) + .byte >($a000+( 8*40)) + .byte >($a000+( 9*40)) + .byte >($a000+( 10*40)) + .byte >($a000+( 11*40)) + .byte >($a000+( 12*40)) + .byte >($a000+( 13*40)) + .byte >($a000+( 14*40)) + .byte >($a000+( 15*40)) + .byte >($a000+( 16*40)) + .byte >($a000+( 17*40)) + .byte >($a000+( 18*40)) + .byte >($a000+( 19*40)) + .byte >($a000+( 20*40)) + .byte >($a000+( 21*40)) + .byte >($a000+( 22*40)) + .byte >($a000+( 23*40)) + .byte >($a000+( 24*40)) + .byte >($a000+( 25*40)) + .byte >($a000+( 26*40)) + .byte >($a000+( 27*40)) + .byte >($a000+( 28*40)) + .byte >($a000+( 29*40)) + .byte >($a000+( 30*40)) + .byte >($a000+( 31*40)) + .byte >($a000+( 32*40)) + .byte >($a000+( 33*40)) + .byte >($a000+( 34*40)) + .byte >($a000+( 35*40)) + .byte >($a000+( 36*40)) + .byte >($a000+( 37*40)) + .byte >($a000+( 38*40)) + .byte >($a000+( 39*40)) + .byte >($a000+( 40*40)) + .byte >($a000+( 41*40)) + .byte >($a000+( 42*40)) + .byte >($a000+( 43*40)) + .byte >($a000+( 44*40)) + .byte >($a000+( 45*40)) + .byte >($a000+( 46*40)) + .byte >($a000+( 47*40)) + .byte >($a000+( 48*40)) + .byte >($a000+( 49*40)) + .byte >($a000+( 50*40)) + .byte >($a000+( 51*40)) + .byte >($a000+( 52*40)) + .byte >($a000+( 53*40)) + .byte >($a000+( 54*40)) + .byte >($a000+( 55*40)) + .byte >($a000+( 56*40)) + .byte >($a000+( 57*40)) + .byte >($a000+( 58*40)) + .byte >($a000+( 59*40)) + .byte >($a000+( 60*40)) + .byte >($a000+( 61*40)) + .byte >($a000+( 62*40)) + .byte >($a000+( 63*40)) + .byte >($a000+( 64*40)) + .byte >($a000+( 65*40)) + .byte >($a000+( 66*40)) + .byte >($a000+( 67*40)) + .byte >($a000+( 68*40)) + .byte >($a000+( 69*40)) + .byte >($a000+( 70*40)) + .byte >($a000+( 71*40)) + .byte >($a000+( 72*40)) + .byte >($a000+( 73*40)) + .byte >($a000+( 74*40)) + .byte >($a000+( 75*40)) + .byte >($a000+( 76*40)) + .byte >($a000+( 77*40)) + .byte >($a000+( 78*40)) + .byte >($a000+( 79*40)) + .byte >($a000+( 80*40)) + .byte >($a000+( 81*40)) + .byte >($a000+( 82*40)) + .byte >($a000+( 83*40)) + .byte >($a000+( 84*40)) + .byte >($a000+( 85*40)) + .byte >($a000+( 86*40)) + .byte >($a000+( 87*40)) + .byte >($a000+( 88*40)) + .byte >($a000+( 89*40)) + .byte >($a000+( 90*40)) + .byte >($a000+( 91*40)) + .byte >($a000+( 92*40)) + .byte >($a000+( 93*40)) + .byte >($a000+( 94*40)) + .byte >($a000+( 95*40)) + .byte >($a000+( 96*40)) + .byte >($a000+( 97*40)) + .byte >($a000+( 98*40)) + .byte >($a000+( 99*40)) + .byte >($a000+(100*40)) + .byte >($a000+(101*40)) + .byte >($a000+(102*40)) + .byte >($a000+(103*40)) + .byte >($a000+(104*40)) + .byte >($a000+(105*40)) + .byte >($a000+(106*40)) + .byte >($a000+(107*40)) + .byte >($a000+(108*40)) + .byte >($a000+(109*40)) + .byte >($a000+(110*40)) + .byte >($a000+(111*40)) + .byte >($a000+(112*40)) + .byte >($a000+(113*40)) + .byte >($a000+(114*40)) + .byte >($a000+(115*40)) + .byte >($a000+(116*40)) + .byte >($a000+(117*40)) + .byte >($a000+(118*40)) + .byte >($a000+(119*40)) + .byte >($a000+(120*40)) + .byte >($a000+(121*40)) + .byte >($a000+(122*40)) + .byte >($a000+(123*40)) + .byte >($a000+(124*40)) + .byte >($a000+(125*40)) + .byte >($a000+(126*40)) + .byte >($a000+(127*40)) + .byte >($a000+(128*40)) + .byte >($a000+(129*40)) + .byte >($a000+(130*40)) + .byte >($a000+(131*40)) + .byte >($a000+(132*40)) + .byte >($a000+(133*40)) + .byte >($a000+(134*40)) + .byte >($a000+(135*40)) + .byte >($a000+(136*40)) + .byte >($a000+(137*40)) + .byte >($a000+(138*40)) + .byte >($a000+(139*40)) + .byte >($a000+(140*40)) + .byte >($a000+(141*40)) + .byte >($a000+(142*40)) + .byte >($a000+(143*40)) + .byte >($a000+(144*40)) + .byte >($a000+(145*40)) + .byte >($a000+(146*40)) + .byte >($a000+(147*40)) + .byte >($a000+(148*40)) + .byte >($a000+(149*40)) + .byte >($a000+(150*40)) + .byte >($a000+(151*40)) + .byte >($a000+(152*40)) + .byte >($a000+(153*40)) + .byte >($a000+(154*40)) + .byte >($a000+(155*40)) + .byte >($a000+(156*40)) + .byte >($a000+(157*40)) + .byte >($a000+(158*40)) + .byte >($a000+(159*40)) + .byte >($a000+(160*40)) + .byte >($a000+(161*40)) + .byte >($a000+(162*40)) + .byte >($a000+(163*40)) + .byte >($a000+(164*40)) + .byte >($a000+(165*40)) + .byte >($a000+(166*40)) + .byte >($a000+(167*40)) + .byte >($a000+(168*40)) + .byte >($a000+(169*40)) + .byte >($a000+(170*40)) + .byte >($a000+(171*40)) + .byte >($a000+(172*40)) + .byte >($a000+(173*40)) + .byte >($a000+(174*40)) + .byte >($a000+(175*40)) + .byte >($a000+(176*40)) + .byte >($a000+(177*40)) + .byte >($a000+(178*40)) + .byte >($a000+(179*40)) + .byte >($a000+(180*40)) + .byte >($a000+(181*40)) + .byte >($a000+(182*40)) + .byte >($a000+(183*40)) + .byte >($a000+(184*40)) + .byte >($a000+(185*40)) + .byte >($a000+(186*40)) + .byte >($a000+(187*40)) + .byte >($a000+(188*40)) + .byte >($a000+(189*40)) + .byte >($a000+(190*40)) + .byte >($a000+(191*40)) + .byte >($a000+(192*40)) + .byte >($a000+(193*40)) + .byte >($a000+(194*40)) + .byte >($a000+(195*40)) + .byte >($a000+(196*40)) + .byte >($a000+(197*40)) + .byte >($a000+(198*40)) + .byte >($a000+(199*40)) + + +.export _getkey +.export _hires_CharSet +.export _hires_DrawA +.export _hires_DrawCharA +.export _hires_DrawClrA +.export _hires_MaskA +.export _hires_Pieces +.export _hires_SelectA +.export _hires_clr +.export _hires_rop +.export _hires_src +.export _hires_xpos +.export _hires_xsize +.export _hires_ypos +.export _hires_ysize +.export _quit +.export _setup +.export _hires